仅获取与相同订单号对应的所有订单项的订单状态相同的行

时间:2016-08-11 07:11:20

标签: sql sql-server

以下是我的数据表结构

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

请帮帮我

1 个答案:

答案 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