SQL Server在可用时显示数据

时间:2014-04-03 15:05:07

标签: sql sql-server

我正在考虑四个网站来跟踪一周内site1,site2,site3和site 4的订单, 如果在上周没有针对这些网站的订单日期,那么我的计数为0 正如预期的那样

这是一个查询,

select  SiteName
    ,SUM(Case When  DATEPART(dd,OrderDate) > DATEPART(dd,DATEADD(DAY, 1-DATEPART(WEEKDAY, getdate()), getdate()))
              Then 1
            Else 0 
            End) as Orders
from SiteOrder where SiteName in ('Site1','Site2','Site3','Site4')
GROUP BY SiteName
order by SiteName
到目前为止一切顺利, 我将来需要考虑其他三个网站,当记录开始出现时,我可以将这些网站包含在where子句中,如

 ('Site1','Site2','Site3','Site4','Site5','Site6','Site7')

但如果没有我不想要的订单日期,那将开始给我0对这些网站。 所以我们假设网站4预计在三周内完成,并且在三周之后输入一个订单日期,我想开始显示该网站数量,并且在随后几周内如果没有订单数量而不是通过所有方式显示0,也许它的魔力并不可能,但在我放弃之前,我认为对世界进行了不良检查

1 个答案:

答案 0 :(得分:1)

根据我的评论,我不清楚您的日期数学意图是什么,但如果您在HAVING子句中翻转它,您可以将结果限制为具有过去订单的网站。

SELECT SiteName
      ,SUM(CASE WHEN  DATEPART(dd,OrderDate) > DATEPART(dd,DATEADD(DAY, 1-DATEPART(WEEKDAY, GETDATE()), GETDATE()))
                THEN 1
                ELSE 0 
           END) AS Orders
  FROM SiteOrder 
 WHERE SiteName IN ('Site1','Site2','Site3','Site4','Site5','Site6','Site7')
 GROUP BY SiteName
HAVING SUM(CASE WHEN DATEPART(dd,OrderDate) <= DATEPART(dd,DATEADD(DAY, -6 -DATEPART(WEEKDAY, GETDATE()), GETDATE()))
                THEN 1
                ELSE 0 
           END) > 1
 ORDER BY SiteName

我认为有一种更有效的方法,但我想让我们在担心之前了解我们想要完成的事情。