如何从另一个表创建SQL的Matrix表

时间:2015-08-04 10:57:17

标签: sql-server

我的下表包含以下列。

    ------------------------------------- 
     Column1 | Column2 | TotalCount
    --------------------------------------
         1         1         40
         1         2         50
         2         1         10
         2         2         60

另外,我有另一个与Column1相关的表,其中1是X,2是Y,而Column2则相同,其中1是A,2是B

我试图想出一个基本上给我一些看法的SQL语句......

       --------------------
        ColumnName | A | B
       --------------------
           X        40   50
           Y        10   60

知道如何实现这一目标?我一直试图在没有运气的情况下调整数据。

谢谢!

2 个答案:

答案 0 :(得分:1)

完整的工作示例:

DECLARE @DataSource TABLE
(
    [Column1] TINYINT
   ,[Column2] TINYINT
   ,[TotalCount] TINYINT
);

INSERT INTO @DataSource ([Column1], [Column2], [TotalCount])
VALUES (1, 1, 40)
      ,(1, 2, 50)
      ,(2, 1, 10)
      ,(2, 2, 60);

SELECT *
FROM
(
    SELECT IIF([Column1] = 1, 'X', 'Y') AS [ColumnName]
          ,IIF([Column2] = 1, 'A', 'B') AS [Column2]
          ,[TotalCount]
    FROM  @DataSource
) DS
PIVOT 
(
    MAX([TotalCount]) FOR [Column2] IN ([A], [B])
) PVT;

enter image description here

答案 1 :(得分:1)

使用条件聚合:

WITH tbl AS(
    SELECT * FROM ( VALUES
        (1, 1, 40), (1, 2, 50),
        (2, 1, 10), (2, 2, 60)
    )t(Column1, Column2, TotalCount) 
)
SELECT
    ColumnName = CASE WHEN Column1 = 1 THEN 'X' ELSE 'Y' END,
    A = MAX(CASE WHEN Column2 = 1 THEN TotalCount END),
    B = MAX(CASE WHEN Column2 = 2 THEN TotalCount END)
FROM tbl
GROUP BY Column1

结果:

ColumnName A           B
---------- ----------- -----------
X          40          50
Y          10          60