我有一个我想要旋转的 SQL 表。例如:
来自:
Id U-num Item Count Q1 Q2
1 11 item1 10 32 1
1 11 item2 5 7 9
1 11 item3 5 8 0
2 12 item1 20 132 0
2 12 item2 30 32 0
2 12 item3 20 0 0
3 4 item1 10 322 0
3 4 item2 10 2 22
3 4 item3 20 32 55
至:
Id U-num Total Item1-Q1 Item1-Q2 Item2-Q1 Item2-Q2 Item3-Q1 Item3-q2
1 11 20 32 1 7 9 8 0
2 12 70 132 0 32 0 0 0
3 4 40 322 0 2 22 32 55
其中总计列是每个 ID 的计数列的总和。例如,Id 1 的计数为 10,5,5,在“总计”列中为 20。
我可以通过在 table1 上使用光标并形成 table2 来完成此操作。 但这不是最好的方法。我上网查了一下,发现可以使用Pivot,但这里无法应用Pivot。有人可以帮我在这里应用枢轴吗?
尝试了 stackoverflow 上的几个示例,但无法弄清楚如何为此编写查询。
我在这里跳过光标代码,因为它太大了,这就是我想使用枢轴的原因。
最佳答案
非常有趣:
MS SQL Server 2014 架构设置:
create table t (Id int, Unum int, Item varchar(20), c int, Q1 int, Q2 int);
insert into t values
(1 , 11 ,'item1', 10 , 32 , 1),
(1 , 11 ,'item2', 5 , 7 , 9),
(1 , 11 ,'item3', 5 , 8 , 0),
(2 , 12 ,'item1', 20 , 132 , 0),
(2 , 12 ,'item2', 30 , 32 , 0),
(2 , 12 ,'item3', 20 , 0 , 0),
(3 , 4 ,'item1', 10 , 322 , 0),
(3 , 4 ,'item2', 10 , 2 , 22),
(3 , 4 ,'item3', 20 , 32 , 55);
查询 1:
;with cte as (
select Id, Unum, item + '-Q1' as Q, Q1 as v,
sum(c) over ( partition by Id) as T from t
union all
select Id, Unum, item + '-Q2' as Q, Q2 as v,
sum(c) over ( partition by Id ) as T from t )
SELECT Id, Unum, T, [Item1-Q1], [Item1-Q2],
[Item2-Q1], [Item2-Q2],
[Item3-Q1], [Item3-q2]
FROM CTE
PIVOT
(
sum (v)
FOR Q IN
( [Item1-Q1], [Item1-Q2],
[Item2-Q1], [Item2-Q2],
[Item3-Q1], [Item3-q2] )
) AS pvt
ORDER BY ID
<强> Results :
| Id | Unum | T | Item1-Q1 | Item1-Q2 | Item2-Q1 | Item2-Q2 | Item3-Q1 | Item3-q2 |
|----|------|----|----------|----------|----------|----------|----------|----------|
| 1 | 11 | 20 | 32 | 1 | 7 | 9 | 8 | 0 |
| 2 | 12 | 70 | 132 | 0 | 32 | 0 | 0 | 0 |
| 3 | 4 | 40 | 322 | 0 | 2 | 22 | 32 | 55 |
关于sql - 如何在sql server中应用pivot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31361388/