我有一個表,看起來下如何做的套組在SQL Server和篩選記錄
SALES_ORDER_ID DATEDIFFERENCE FLAG 1 -40 1 1 -20 1 2 40 0 2 -10 1 3 12 0 4 -70 1 5 60 0 5 23 0
// DDL
Declare @t table (sales_order_id int,DateDifference int, Flag int)
Insert Into @t
Select 1,-40,1 Union All Select 1,-20,1 Union All
Select 2,40,0 Union All Select 2,-10,1 Union All
Select 3,12,0 Union All Select 4,-70,1 Union All
Select 5,60,0 Union All Select 5,23,0
Select *
From @t
輸出應該
sales_order_id DateDifference Flag
3 12 0
5 60 0
5 23 0
即羣組(Sales_Order_Id)所有項目都具有標示爲0。
我的意思是Sales_Order_Id = 2將不會出現,因爲至少一個項目不爲零(2,-10,1)
請不要問我,如果信息不充分。
如何做這個查詢?
編輯
我發現我的答案..雖然仍然在尋找一個更優雅的一個
;with cte as(
Select
sales_order_id = Case when x.sales_order_id is null then y.sales_order_id else x.sales_order_id end
,x.CountFor0
,y.CountFor1
From
(Select sales_order_id,CountFor0 = count(*)
from @t
where Flag = 0
group by sales_order_id)x
Full Join
(Select sales_order_id,CountFor1 =count(*)
from @t
where Flag = 1
group by sales_order_id)y
On x.sales_order_id = y.sales_order_id)
Select *
From cte
where CountFor1 is null
感謝所有
因爲我沒有太多的聲譽,所以不能發佈我的答案部分的答案
不知道爲什麼我一直downvoted ..是否有任何錯誤的問題我問過嗎? – 2012-07-27 04:02:51
歡迎來到Stackoverflow並祝賀你回答你自己的問題! – 2012-07-27 04:34:26
好工作! +1回答你自己的問題! – hmmftg 2012-07-27 04:43:59