SQL Pivot,行到列

时间:2016-01-04 10:49:54

标签: sql pivot

我试图了解如何执行此操作,但所有示例均基于总和。我不想这样做。我有两列,事务ID和ProductID。

我真的希望在列中返回productID,每行都是一个新的transactionID。没有涉及的金额。

此致

1 个答案:

答案 0 :(得分:0)

我创建了一个名为Products的表格,其中我有两列你想要的,但你可以将其标准化:

以下脚本适用于Microsoft SQL Server 2008 R2

表格

CREATE TABLE Products
(
    ProductID INT,
    TransactionID INT
);

<强>插入

INSERT INTO Products VALUES(1,101);
INSERT INTO Products VALUES(2,102);
INSERT INTO Products VALUES(3,103);
INSERT INTO Products VALUES(4,104);
INSERT INTO Products VALUES(4,104);

注意:带有productID = 4的最后一个记录插件是两次,只显示数据透视表中的计数。

获取ProductID :在这里,我使用productIDs获取STUFF

select  STUFF((SELECT distinct ',' + QUOTENAME(ProductID) 
              FROM products 
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'');

数据透视表脚本

SELECT TransactionID,[1],[2],[3],[4] FROM 
(
    SELECT ProductID,TransactionID,TransactionID   as tr
    FROM Products
) AS a
PIVOT 
(
     count(Tr)
     FOR ProductID in ([1],[2],[3],[4])
) AS pvt;

<强>输出

TransactioID    1   2   3   4
-------------------------------
101             1   0   0   0
102             0   1   0   0
103             0   0   1   0
104             0   0   0   2