下のようなテーブルがあります
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
つまり、すべてのアイテムのフラグが0であるグループ(Sales_Order_Id)です。
つまり、少なくとも1つのアイテムがゼロではないため、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
ありがとうございます
評判が悪いので、回答欄に回答を投稿できません