SQL Server Pivot - >按条件求和行

时间:2014-02-25 21:09:11

标签: sql-server tsql pivot

我对SQL Server中的pivot函数有疑问。我有一张表如下所示:

L  |  SH | SUM | KTYPE
----------------------
L1 |  A  | 10  | 1    
L1 |  B  | 12  | 1
L1 |  A  | 14  | 2    
L1 |  B  | 19  | 2        
L2 |  A  |  9  | 1 
L2 |  B  | 25  | 1    
L3 |  A  |  2  | 1   
L3 |  B  |  2  | 1  
L4 |  A  |  9  | 1   
L4 |  B  | 23  | 1   
...

因此,我希望有以下结构:

   |     1     |    2      |   Total   |
L  |  A  |  B  | A  |   B  | A  |   B  |
----------------------------------------
L1 |  10 | 12  | 14 |  19  | 24 |  31  |
L2 |  9  | 25  | 0  |   0  |  9 |  25  |
L3 |  2  |  2  | 0  |   0  |  2 |   2  |
L4 |  9  | 23  | 0  |   0  |  9 |  23  |
...

如果我是认真的,我不知道该怎么做。我能够按KTYPE“转动”数据,但不能KTYPESH。有人可以告诉我这是否可行并给我一个提示?

提前致谢! 托米

1 个答案:

答案 0 :(得分:0)

以上是关于连接字段的上述评论的示例。

DECLARE @TMP TABLE (L VARCHAR(2), SH VARCHAR(1), SUM INT, KTYPE INT)

INSERT INTO @TMP
SELECT 'L1','A',10,1 UNION ALL
SELECT 'L1','B',12,1 UNION ALL
SELECT 'L1','A',14,2 UNION ALL
SELECT 'L1','B',19,2 UNION ALL
SELECT 'L2','A',9,1 UNION ALL
SELECT 'L2','B',25,1 UNION ALL   
SELECT 'L3','A',2,1 UNION ALL  
SELECT 'L3','B',2,1 UNION ALL
SELECT 'L4','A',9,1 UNION ALL 
SELECT 'L4','B',23,1

SELECT *
FROM (SELECT CAST(KTYPE AS VARCHAR)+SH AS KTYPESH,SUM VAL,L FROM @TMP) DATATABLE
PIVOT (SUM([VAL])
       FOR KTYPESH IN ([1A],[1B],[2A],[2B])) PIVOTTABLE