Sql Server数据透视表不分组结果集

Soh*_*pta 8 t-sql pivot sql-server-2005 sql-server-2008-r2

我的表格值如下 -

EMP_CODE | LEAVENAME | APP_TYPE |  LEAVE_DATE | ACT_DAYS
--------------------------------------------------------
ST006    |  CL       | P        | 2012-01-03  | 1.0
ST006    |  CL       | P        | 2012-01-18  | 1.0
ST006    |  SL       | P        | 2012-01-27  | 1.0
ST002    |  CL       | P        | 2012-01-04  | 1.0
ST002    |  CL       | P        | 2012-01-12  | 1.0
ST002    |  SL       | P        | 2012-01-27  | 1.0
OCO038   |  CL       | P        | 2012-01-27  | 1.0
HO188    |  CL       | P        | 2012-01-09  | 1.0
HO188    |  CL       | P        | 2012-01-30  | 1.0
HO085    |  CL       | P        | 2012-01-19  | 1.0
HO085    |  SL       | P        | 2012-01-23  | 1.0
Run Code Online (Sandbox Code Playgroud)

我已经写了这个查询来将所有的假期类型加起来作为每个雇员的列.每位员工必须只有一行.

SELECT EMP_CODE,[CL],[LWP],[PL],[SL] FROM LEAVE_DETAIL L 
PIVOT (SUM(ACT_DAYS) FOR LEAVENAME IN ([CL],[LWP],[PL],[SL])) 
AS PVT ORDER BY EMP_CODE;
Run Code Online (Sandbox Code Playgroud)

但是这个查询没有给我预期的输出.每个员工都有不止一行,这不是我想要的.

下表显示了预期产量 -

EMP_CODE |  CL  | SL  |
---------|------|-----|
ST006    | 2.0  | 1.0 |
ST002    | 2.0  | 1.0 |
OCO038   | 1.0  | 0.0 |
HO188    | 2.0  | 0.0 |
HO085    | 1.0  | 1.0 |
Run Code Online (Sandbox Code Playgroud)

请帮忙.

Ari*_*ion 9

您甚至不需要在查询中使用group by.因为枢轴的作用是它在其他列上"分组".这个解决方案的关键是内部选择.我认为首先与小组进行总结,然后再次申请一笔金额和一组,这不是神圣的.

SELECT 
    EMP_CODE,
    [CL],
    [LWP],
    [PL],
    [SL] 
FROM 
(
    SELECT 
        EMP_CODE, 
        LEAVENAME, 
        ACT_DAYS
    FROM 
        @tmp_emp
) L 
PIVOT
(
    SUM(ACT_DAYS) 
    FOR LEAVENAME IN ([CL],[LWP],[PL],[SL])
) 
AS PVT 
ORDER BY EMP_CODE
Run Code Online (Sandbox Code Playgroud)

这将得到相同的结果.