2013-07-16 149 views
0

我被要求找到2012年6月至8月以及2012年9月至10月期间购买的人。所以我这样做了。这个查询得到的结果对我来说看起来是正确的,当我检查出来。重复订单+订单数量和每个订单的总数

SELECT o.BillEmail 
FROM dbo.tblOrder o 
WHERE (SELECT COUNT(o2.OrderDate) 
    FROM dbo.tblOrder o2 
    WHERE o2.OrderID = o.OrderID 
     AND o2.OrderDate >= '2012-06-01' AND o2.OrderDate <= '2012-08-31') > 0 
     AND (SELECT COUNT(o2.OrderDate) 
      FROM dbo.tblOrder o2 
       WHERE o2.BillEmail = o.BillEmail 
        AND o2.OrderDate >= '2012-09-01' AND o2.OrderDate <= '2012-10-31' 
        AND o2.DomainProjectID=13) > 0 
    GROUP BY o.BillEmail 
    ORDER BY o.BillEmail 

然后他们问我找订单总量中这两个时间段的每个客户放置,多少这些订单全部总计是。所以我刚刚添加了这些要求:

SELECT o.BillEmail, COUNT(o.OrderID) as Orders, SUM(o.Total) as 'Total' 
FROM dbo.tblOrder o 
WHERE (SELECT COUNT(o2.OrderDate) 
    FROM dbo.tblOrder o2 
    WHERE o2.OrderID = o.OrderID 
     AND o2.OrderDate >= '2012-06-01' AND o2.OrderDate <= '2012-08-31') > 0 
     AND (SELECT COUNT(o2.OrderDate) 
      FROM dbo.tblOrder o2 
      WHERE o2.BillEmail = o.BillEmail 
       AND o2.OrderDate >= '2012-09-01' AND o2.OrderDate <= '2012-10-31' 
       AND o2.DomainProjectID=13) > 0 
    GROUP BY o.BillEmail 
    ORDER BY o.BillEmail 

但是,这只能从6月到8月的第一个指定时间段内下订单。所以它只显示从当时开始的订单和总计,而不是下半年。

我该如何获得它来拉两个时期的数据?

回答

0

在您的查询中,您似乎只对DomainProjectID = 13感兴趣,对吧?另外,如果OrderDate是日期时间并且具有一些时间值(即“2012-10-31 00:00:00.001”大于“2012-10-31”),则可能会排除某些结果。

随着中说,这里是获取信息的一种方式:

Select 
    o.BillEmail, 
    SUM(CASE WHEN o.OrderDate >= '2012-06-01' and o.OrderDate < '2012-09-01' THEN 1 ELSE 0 END) as JunToAugOrders, 
    SUM(CASE WHEN o.OrderDate >= '2012-06-01' and o.OrderDate < '2012-09-01' THEN o.Total ELSE 0 END) as JunToAugTotal, 
    SUM(CASE WHEN o.OrderDate >= '2012-09-01' and o.OrderDate < '2012-11-01' THEN 1 ELSE 0 END) as SepToOctOrders, 
    SUM(CASE WHEN o.OrderDate >= '2012-09-01' and o.OrderDate < '2012-11-01' THEN o.Total ELSE 0 END) as SepToOctTotals, 
    SUM(CASE WHEN o.OrderDate >= '2012-06-01' and o.OrderDate < '2012-11-01' THEN 1 ELSE 0 END) as JunToOctOrders, 
    SUM(CASE WHEN o.OrderDate >= '2012-06-01' and o.OrderDate < '2012-11-01' THEN o.Total ELSE 0 END) as JunToOctTotals 
From 
    dbo.tblOrder o 
Where 
    o.DomainProjectID = 13 
Group By 
    o.BillEmail 
Having 
    SUM(CASE WHEN o.OrderDate >= '2012-06-01' and o.OrderDate < '2012-09-01' THEN 1 ELSE 0 END) > 0 AND 
    SUM(CASE WHEN o.OrderDate >= '2012-09-01' and o.OrderDate < '2012-11-01' THEN 1 ELSE 0 END) > 0 
Order By 
    o.BillEmail 
+0

这看起来很棒,而且比我所要求的要多得多。我将不得不看看它包围我的头,哈哈/初学者 – ash

+0

很高兴它为你工作,你在堆栈溢出在这里很好的公司。我们都是以初学者开始:) –

+0

非常感谢! :d – ash

1

设置两个查询会不好?

+0

我只是不知道这样做的最佳方式,并希望建议。 :c – ash