2013-07-11 20 views
0

我試圖找到訂單由客戶總共至少250美元。然後我需要比較他們購買的每件訂單的實際項目,並查看有多少價值低於或低於100美元。計數項目價值超過100美元不到每個訂單

所以說他們總共購買了5件商品。兩個價值至少100美元。三個少。結果將是:

OrderID LargeItems SmallItems Total 
1112  2   3   5 

所以這就是我之後的一個粗略的例子。

現在我有:

--Total Items purchased in orders worth $250 or more 
SELECT O.OrderID,COUNT(OP.Price) as 'Total' 
FROM dbo.tblOrder O WITH (NOLOCK) 
    INNER JOIN dbo.tblOrderProduct OP WITH (NOLOCK) 
     ON O.OrderID=OP.OrderID 
WHERE O.OrderDate BETWEEN '2011-01-01' AND '2013-01-01' 
    and O.Total >= 250 
group by O.OrderID 
order by O.OrderID 

如果你不能很容易地分辨:

  • OP.Pprice次序爲個別項目的價格
  • O.Total是訂單總計

我錯過了大型和小型項目列。我怎樣才能把這些單獨的計數呢?

謝謝!請詢問您是否需要任何額外信息。

+0

訂購日期是否有與之相關聯的任何時間?如果是這樣[你需要立即停止使用BETWEEN](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common的.aspx)。我懷疑你的查詢不包括2013年1月1日午夜的訂單... –

+0

啊,是的。所以我應該使用> =或類似的東西呢? – ash

回答

5

您可以使用CASE語句來做到這一點:

SELECT O.OrderID 
     ,SUM(CASE WHEN OP.Price >= 100 THEN 1 ELSE 0 END)'LargeItems' 
     ,SUM(CASE WHEN OP.Price < 100 THEN 1 ELSE 0 END)'SmallItems' 
     ,COUNT(OP.Price) as 'Total' 
FROM dbo.tblOrder O WITH (NOLOCK) 
    INNER JOIN dbo.tblOrderProduct OP WITH (NOLOCK) 
     ON O.OrderID=OP.OrderID 
WHERE O.OrderDate BETWEEN '2011-01-01' AND '2013-01-01' 
    and O.Total >= 250 
group by O.OrderID 
order by O.OrderID 
+0

非常感謝! – ash

相關問題