2014-12-04 92 views
0

下面提到的是我的两个查询:SQL查询到在PIVOT结果显示结合

SELECT WINDOWS_NT_LOGIN, COUNT(DPS_NUMBER) as TotalDPS 
FROM DispatcherProductivity 
WHERE DPS_Processed_Time_Stamp>='12/04/2014 10:30 AM' 
AND DPS_Processed_Time_Stamp<='12/05/2014 10:30 AM' 
GROUP BY WINDOWS_NT_LOGIN 
ORDER BY TotalDPS 

SELECT STATUS, COUNT(DPS_NUMBER) AS TotalDPS 
FROM DispatcherProductivity 
WHERE DPS_Processed_Time_Stamp>='12/04/2014 10:30 AM' 
AND DPS_Processed_Time_Stamp<='12/05/2014 10:30 AM' 
GROUP BY STATUS 
ORDER BY TotalDPS 

它们各自的结果是:

WINDOWS_NT_LOGIN TotalDPS 
A_S 72 
T_I_S 133 

STATUS TotalDPS 
ID 1 
Can 2 
NHD 3 
SED 14 
Ord 185 

我想获得这一结果格式:

WINDOWS_NT_LOGIN ID Can NHD SED Ord 
A_S       2 70 
T_I_S   1 2 3 12 115 

感谢

回答

0

我倾向于使用条件为聚合支点。在这种情况下:

SELECT WINDOWS_NT_LOGIN, COUNT(DPS_NUMBER) as TotalDPS, 
     SUM(CASE WHEN status = 'ID' THEN DPS_Number END) as ID, 
     SUM(CASE WHEN status = 'Can' THEN DPS_Number END) as Can, 
     SUM(CASE WHEN status = 'NHD' THEN DPS_Number END) as NHD, 
     SUM(CASE WHEN status = 'SED' THEN DPS_Number END) as SED, 
     SUM(CASE WHEN status = 'Ord' THEN DPS_Number END) as Ord 
FROM DispatcherProductivity 
WHERE DPS_Processed_Time_Stamp >= '12/04/2014 10:30 AM' AND 
     DPS_Processed_Time_Stamp <= '12/05/2014 10:30 AM' 
GROUP BY WINDOWS_NT_LOGIN; 

我也建议您在日期中使用YYYY-MM-DD格式。举个例子,我不知道你的日期是在十二月还是四月和五月。

1

您可以使用此功能PIVOT

SELECT pvt.WINDOWS_NT_LOGIN, 
     pvt.[ID], 
     pvt.[Can], 
     pvt.[NHD], 
     pvt.[SED], 
     pvt.[Ord] 
FROM ( SELECT WINDOWS_NT_LOGIN, STATUS, DPS_NUMBER 
      FROM DispatcherProductivity 
      WHERE DPS_Processed_Time_Stamp>='20141204 10:30:00' 
      AND  DPS_Processed_Time_Stamp<='20141205 10:30:00' 
     ) AS t 
     PIVOT 
     ( COUNT(DPS_NUMBER) 
      FOR STATUS IN ([ID], [Can], [NHD], [SED], [Ord]) 
     ) AS pvt; 

注:我将日期更改为文化不变格式yyyyMMdd hh:mm:ss,但是,我不确定12/04/2014应该是4月12日还是12月4日(与该格式完全相同的问题),因此我可能会输入错误的日期。我认为你的意思是12月4日,就像今天一样。

进一步的阅读读Bad habits to kick : mis-handling date/range queries