2012-11-19 48 views
0

我有一个联合所有查询。但在我的结果集中,我有2个P1记录和3个P2记录。即使没有值,我仍想显示3个P3记录。如何显示零或日期值,如果没有记录显示

请参考下面

SELECT 'P1'  AS Priority, 
     Count(*) Total, 
     CONVERT(VARCHAR(5), Datepart(yyyy, logdate)) 
     + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) 
FROM dbo.mg_rpt_calls 
WHERE priority = 'P1' 
     AND CONVERT(VARCHAR(5), Datepart(yyyy, logdate)) 
      + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) BETWEEN 
       CONVERT(VARCHAR(5), Datepart(yyyy, Getdate())) 
       + RIGHT(
       '00'+ CONVERT(VARCHAR(5), Datepart(mm, Getdate())-2), 2)AND 
       CONVERT(
       VARCHAR(5), Datepart(yyyy, Getdate())) 
       + 
       RIGHT 
       ('00'+ CONVERT(VARCHAR(5), Datepart(mm, Getdate())), 2) 
GROUP BY CONVERT(VARCHAR(5), Datepart(yyyy, logdate)) 
      + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) 
UNION ALL 
SELECT 'P2'  AS Priority, 
     Count(*) Total, 
     CONVERT(VARCHAR(5), Datepart(yyyy, logdate)) 
     + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) 
FROM dbo.mg_rpt_calls 
WHERE priority = 'P2' 
     AND CONVERT(VARCHAR(5), Datepart(yyyy, logdate)) 
      + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) BETWEEN 
       CONVERT(VARCHAR(5), Datepart(yyyy, Getdate())) 
       + RIGHT(
       '00'+ CONVERT(VARCHAR(5), Datepart(mm, Getdate())-2), 2)AND 
       CONVERT(
       VARCHAR(5), Datepart(yyyy, Getdate())) 
       + 
       RIGHT 
       ('00'+ CONVERT(VARCHAR(5), Datepart(mm, Getdate())), 2) 
GROUP BY CONVERT(VARCHAR(5), Datepart(yyyy, logdate)) 
      + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) 
ORDER BY CONVERT(VARCHAR(5), Datepart(yyyy, logdate)) 
      + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) 

我的结果集我的代码如下

Priority Total (No column name) 
P2  9  201209 
P2  15 201210 
P1  1  201210 
P1  1  201211 
P2  5  201211 

感谢, 迈克尔

+2

对不起,我可能会错过一些东西 - 但P3记录从哪里来?这些人没有工会......还有,你为什么要使用工会? –

回答

0

我想你想在一个较低的水平,使用组,如:

SELECT Priority, Count(*) Total, 
     CONVERT(VARCHAR(5), Datepart(yyyy, logdate)) + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) 
FROM dbo.mg_rpt_calls 
WHERE CONVERT(VARCHAR(5), Datepart(yyyy, logdate)) 
      + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) BETWEEN 
       CONVERT(VARCHAR(5), Datepart(yyyy, Getdate())) 
       + RIGHT(
       '00'+ CONVERT(VARCHAR(5), Datepart(mm, Getdate())-2), 2)AND 
       CONVERT(VARCHAR(5), Datepart(yyyy, Getdate())) + 
       RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, Getdate())), 2) 
group by Priority, CONVERT(VARCHAR(5), Datepart(yyyy, logdate)) + RIGHT('00'+ CONVERT(VARCHAR(5), Datepart(mm, logdate)), 2) 

您可以选择包含另一个where子句或having子句,其效果为priority in ('P1', 'P2', 'P3')