单行到多列多行
Single row to multiple columns and rows
我有一个名为 Test
的 SQL 服务器 table,带有以下示例数据:
LineNo BaseJanuary BaseFebruary BudgetJanuary BudgetFebruary
1 10000 20000 30000 40000
2 70000 80000 90000 100000
我想在 SQL 服务器视图(或临时 table 等)中创建以下结构,但我被卡住了...任何 ideas/suggestions 将不胜感激!
LineNo Month Base Budget
1 January 10000 30000
2 January 70000 90000
1 February 20000 40000
2 February 80000 100000
注意:数字仅供参考,数据是动态的。
select LineNo,
'January' as Month,
BaseJanuary as Base,
BudgetJanuary as Budget
from test
union
select LineNo,
'February' as Month,
BaseFebruary as Base,
BudgetFebruary as Budget
from test
order by LineNo, Month
SELECT LineNo, 'January' AS Month, BaseJanuary, BudgetFebruary
FROM Test
ORDER BY LineNo
UNION ALL
SELECT LineNo, 'February' AS Month, BaseFebruary, BudgetFebruary
FROM Test
ORDER BY LineNo
CROSS APPLY
可用于UNPIVOT
数据:
SELECT [LineNo], [Month], Base, Budget
FROM test
CROSS APPLY(VALUES -- unpivot columns into rows
('January', BaseJanuary, BudgetJanuary) -- generate row for jan
, ('February', BaseFebruary, BudgetFebruary) -- generate row for feb
) ca ([Month], Base, Budget)
我有一个名为 Test
的 SQL 服务器 table,带有以下示例数据:
LineNo BaseJanuary BaseFebruary BudgetJanuary BudgetFebruary
1 10000 20000 30000 40000
2 70000 80000 90000 100000
我想在 SQL 服务器视图(或临时 table 等)中创建以下结构,但我被卡住了...任何 ideas/suggestions 将不胜感激!
LineNo Month Base Budget
1 January 10000 30000
2 January 70000 90000
1 February 20000 40000
2 February 80000 100000
注意:数字仅供参考,数据是动态的。
select LineNo,
'January' as Month,
BaseJanuary as Base,
BudgetJanuary as Budget
from test
union
select LineNo,
'February' as Month,
BaseFebruary as Base,
BudgetFebruary as Budget
from test
order by LineNo, Month
SELECT LineNo, 'January' AS Month, BaseJanuary, BudgetFebruary
FROM Test
ORDER BY LineNo
UNION ALL
SELECT LineNo, 'February' AS Month, BaseFebruary, BudgetFebruary
FROM Test
ORDER BY LineNo
CROSS APPLY
可用于UNPIVOT
数据:
SELECT [LineNo], [Month], Base, Budget
FROM test
CROSS APPLY(VALUES -- unpivot columns into rows
('January', BaseJanuary, BudgetJanuary) -- generate row for jan
, ('February', BaseFebruary, BudgetFebruary) -- generate row for feb
) ca ([Month], Base, Budget)