Sql server 基于外观的透视数据
我希望为部门的每个服务单元编号获得标志。为此,我编写了以下PIVOT函数,但它与我的预期输出不符Sql server 基于外观的透视数据,sql-server,tsql,sql-server-2012,pivot,Sql Server,Tsql,Sql Server 2012,Pivot,我希望为部门的每个服务单元编号获得标志。为此,我编写了以下PIVOT函数,但它与我的预期输出不符 DECLARE @MyTab TABLE ( Service_Number VARCHAR(20), Department VARCHAR(20) ) INSERT INTO @MyTab VALUES ('12A','ABC'), ('12A','XYZ'), ('12B','ABC'), ('12C','PQR') SELECT * FROM @MyTab S
DECLARE @MyTab TABLE
(
Service_Number VARCHAR(20),
Department VARCHAR(20)
)
INSERT INTO @MyTab VALUES ('12A','ABC'), ('12A','XYZ'), ('12B','ABC'), ('12C','PQR')
SELECT * FROM @MyTab
SELECT
[ABC],[xyz],[pqr]
FROM @MyTab
PIVOT( MAX(Service_Number)
FOR Service_Number IN ([ABC],[xyz],[pqr])) AS P
输出:
预期输出:
Service_Number ABC XYZ PQR
12A 1 1 0
12B 1 0 0
12C 0 1 1
您需要更改枢轴零件,如下所示:
SELECT * from
(Select Service_Number, Department FROM @MyTab ) a
PIVOT( Count(Department) FOR Department IN ([ABC],[xyz],[pqr])) AS P
+----------------+-----+-----+-----+
| Service_Number | ABC | xyz | pqr |
+----------------+-----+-----+-----+
| 12A | 1 | 1 | 0 |
| 12B | 1 | 0 | 0 |
| 12C | 0 | 0 | 1 |
+----------------+-----+-----+-----+
服务号没有[ABC]、[xyz]
输出如下:
SELECT * from
(Select Service_Number, Department FROM @MyTab ) a
PIVOT( Count(Department) FOR Department IN ([ABC],[xyz],[pqr])) AS P
+----------------+-----+-----+-----+
| Service_Number | ABC | xyz | pqr |
+----------------+-----+-----+-----+
| 12A | 1 | 1 | 0 |
| 12B | 1 | 0 | 0 |
| 12C | 0 | 0 | 1 |
+----------------+-----+-----+-----+
不是针对服务编号,而是针对中的部门(值列表),但仍将返回1行,不是所需的输出