2012-12-06 20 views
0

这里是低于我的查询:枢轴查询主数据透视结果可以使用两个单独的日期进行日期过滤?

select employid,deprtmnt,jobtitle,[H-RT],[H-OT] 
from 
(     
SELECT employid,deprtmnt,jobtitle,chekdate,UNTSTOPY,Category     
FROM 
(     
    SELECT employid,deprtmnt,jobtitle,chekdate,UNTSTOPY,payrolcd as  category    
    FROM [upr30300]  
    where DEPRTMNT like '600%'   
) t     
where chekdate = '2012-03-09' and Category in ('H-RT','H-OT')     
) d    
PIVOT 
(
    SUM(UNTSTOPY) 
    FOR Category IN ([H-RT],[H-OT]) 
)p 

结果示出了包括两列枢转(H-RT和H-OT)。我可以通过chekdate过滤并获得过滤器的结果,但我试图弄清楚如何获得两个EXTRA列显示H-RT,H-OT,这将显示过滤chekdate加上14天。 H-RT(period1),H-RT(period2),H-RT(period1),H-RT(period1),H-RT(period1),H-RT(period1),H-RT(period1) H-OT(period2)......任何人都会有如何完成这个任务的方向或想法?

预先感谢您!

下面是示例数据:

EMPLOYID DEPRTMNT JOBTITLE H-RT H-OT 
ABC123   600-20 CA  77.78000 7.47000 
ABC124   600-80 CSA  55.65000 0.58000 
ABC125   600-70 RAA  77.68000 0.03000 

这里期望数据:

EMPLOYID DEPRTMNT JOBTITLE H-RT1 H-OT1  H-RT2  H-OT2 
ABC123   600-20 CA  77.78000 7.47000 80.00  12.00 
ABC124   600-80 CSA  55.65000 0.58000 74.00  16.00 
ABC125   600-70 RAA  77.68000 0.03000 48.00  2.00 

所期望的数据的列H-RT1,H-OT1是其中chekdate =“2012-03-09 '和列H-RT2,H-OT2将在哪里chekdate ='2012-03-09'+ 14天。

+1

你可以发布一些示例数据从你的表,然后期望的结果? – Taryn

+0

对不起,它看起来......我不知道如何使我的示例数据显示正确对齐。 – Jae

+0

当你说'chekdate ='2012-03-09'+ 14 days',是否意味着'chekdate ='2012-03-23''或'chekdate BETWEEN'2012-03-09'AND'2012-03- 23''? –

回答

0

你应该能够使用类似于此:

select employid, 
    deprtmnt, 
    jobtitle, 
    [H-RT_1], 
    [H-OT_1], 
    [H-RT_2], 
    [H-OT_2] 
from 
(     
SELECT employid, 
    deprtmnt, 
    jobtitle, 
    chekdate, 
    UNTSTOPY, 
    Category, 
    case when chekdate = '2012-03-09' then Category+'_1' 
     when chekdate = dateadd(d, 14, '2012-03-09') then Category+'_2' end period 
FROM 
(     
    SELECT employid, 
    deprtmnt, 
    jobtitle, 
    chekdate, 
    UNTSTOPY, 
    payrolcd as category    
    FROM [upr30300]  
    where DEPRTMNT like '600%' 
) t     
where (chekdate = '2012-03-09' or chekdate = dateadd(d, 14, '2012-03-09')) 
    and Category in ('H-RT','H-OT')     
) d    
PIVOT 
(
    SUM(UNTSTOPY) 
    FOR Category IN ([H-RT_1],[H-OT_1], [H-RT_2],[H-OT_2]) 
)p 
+0

感谢您对bluefeet的快速响应......但是我收到了RT和OT列的空值以及我正在为每个员工收到多个记录......嗯 – Jae

+0

@JaeChang您可以创建一个[sql小提琴]( http://sqlfiddle.com/)与主表'[upr30300]'的一些数据? – Taryn

+0

由于预数据透视数据集中的“chekdate”列,两对透视列将不会放在同一行上。对我而言,'chekdate'在输出中并没有什么意义,但是如果确实需要它,我可能会使用'2012-03-09'作为chekdate'而不是拉动实际列。 –

相关问题