繁体   English   中英

在SQL中按分组并添加多个列

[英]Group By and Add Multiple Columns in SQL

嗨,我有一些问题。

这是我的示例数据库

001 | A | AC 
001 | B | AC 
002 | A | IN 
002 | C | AC 
003 | A | AC 

笔记

Column 1 - Should be the column header 
Column 2 - Should be the row header 
Column 3 - Should be the data 


我如何创建一个表格使其看起来像这样

- | 001 | 002 | 003 
A | AC  | IN  | AC 
B | AC  |  -  | -  
C | -   | AC  | -  

静态枢轴

CREATE TABLE dbo.tbl (
    col1 VARCHAR(20) NOT NULL,
    col2 VARCHAR(20) NOT NULL,
    col3 VARCHAR(20) NOT NULL
);

INSERT INTO dbo.tbl (col1, col2, col3)
VALUES ('001', 'A', 'AC'),
       ('001', 'B', 'AC'),
       ('002', 'A', 'IN'),
       ('002', 'C', 'AC'),
       ('003', 'A', 'AC');


SELECT col2 as [ ], [001], [002], [003]
FROM 
    (
        SELECT col1, col2, col3 
        FROM tbl
    ) AS t1 
PIVOT 
(
    MAX(col3) 
    FOR col1 IN ([001], [002], [003]) 
) AS t2

OUTPUT:

  | 001 | 002 | 003 
A | AC  | IN  | AC 
B | AC  |  -  | -  
C | -   | AC  | - 

编辑

刚才看到了需要动态枢纽的注释,您可以在这里:

DECLARE @cols   AS NVARCHAR(MAX) = '',
        @sql    AS NVARCHAR(MAX)

SELECT @cols += QUOTENAME((col1)) + ','
                    FROM   (
                            SELECT  DISTINCT col1
                            FROM    tbl                         
                            ) a 

SET @cols   = LEFT(@cols, LEN(@cols) - 1)
SET @sql    = 'SELECT * 
               FROM 
                    (
                        SELECT col1, col2 as [ ], col3 
                        FROM tbl
                    ) x 
                    PIVOT
                    (
                        MAX (col3)
                        FOR col1 IN (' + @cols + ') 
                    ) p'

EXEC sp_executesql @sql

OUTPUT:

  | 001 | 002 | 003 
A | AC  | IN  | AC 
B | AC  |  -  | -  
C | -   | AC  | - 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM