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)
请帮忙.
您甚至不需要在查询中使用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)
这将得到相同的结果.
| 归档时间: |
|
| 查看次数: |
7054 次 |
| 最近记录: |