Sql server 基于外观的透视数据

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

我希望为部门的每个服务单元编号获得标志。为此,我编写了以下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

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行,不是所需的输出