以下是我的数据表结构
id orderNO lineItemNO orderStatus
1 100 1 Processing
2 100 2 Processing
3 100 3 Pending
4 101 1 Pending
5 101 2 Pending
我有orderNo和订单项没有列,表示订单中的产品编号。现在我只想要orderStatus相同的订单和lineItemNo。
例如
订单号100包含3个订单项(1,2,3)但订单项号(1和2)具有orderStatus作为处理和订单项no(3)具有orderStatus已挂起所以我不想要此订单。< / p>
现在订单号为101有2个订单项(1,2),并且来自同一订单的所有订单项都具有相同的订单状态,因此我需要订单101.
所以寻找相同的SQL查询。
我需要输出
id orderNO lineItemNO orderStatus
4 101 1 Pending
5 101 2 Pending
请帮帮我
答案 0 :(得分:1)
关于集合的一些创造性思考应该证明我们可以通过在每个组中找到MIN()
和MAX()
值并比较它们来确定这一点 - 如果它们相等则那么其中没有任何其他值同一组:
declare @t table (id int,orderNO int,lineItemNO int,orderStatus varchar(317))
insert into @t(id,orderNO,lineItemNO,orderStatus) values
(1,100,1,'Processing'),
(2,100,2,'Processing'),
(3,100,3,'Pending'),
(4,101,1,'Pending'),
(5,101,2,'Pending')
;With MinMax as (
select *,
MIN(orderStatus) OVER (PARTITION BY orderNo) as minStat,
MAX(orderStatus) OVER (PARTITION BY orderNo) as maxStat
from
@t
)
select * from MinMax where minStat = maxStat
产生结果:
id orderNO lineItemNO orderStatus minStat maxStat
----------- ----------- ----------- ----------------- ----------------- -----------------
4 101 1 Pending Pending Pending
5 101 2 Pending Pending Pending