当其中一个结果未通过测试时如何删除与分组 ID 相关的所有结果
how to remove all results relating to a grouped ID when one of the results fails a test
所以我要做的是从按 KEYVADD(ID) 分组的 CKDBAUDDP 中检索所有订单。然后我想做的只是 return 如果状态在特定日期范围内的订单。使用我目前拥有的代码,添加另一个 "and" 与 STMPADD 比较只会从已完成的查询中删除这些结果。这并不是我真正想要发生的事情,因为那时结果变得不那么清楚了。
exec(' select KEYVADD
,min(case when VALUADD=0 then STMPADD else null end) as "Status 0"
,min(case when VALUADD=2 then STMPADD else null end) as "Status 2"
,min(case when VALUADD=4 then STMPADD else null end) as "Status 4"
,min(case when VALUADD=5 then STMPADD else null end) as "Status 5"
,min(case when VALUADD=7 then STMPADD else null end) as "Status 7"
,min(case when VALUADD=8 then STMPADD else null end) as "Status 8"
,min(case when VALUADD=9 then STMPADD else null end) as "Status 9"
,min(nmdoh) as "Customer"
,min(c.scscn) as "Container"
,min(whsoh) as "Warehouse"
,min(preoh) as "Preorder"
from CKDBAUDDP a
left outer join mvpscohp h on left(a.KEYVADD,7) = h.ONHOH
left outer join mvpscnhp c on h.onhoh = c.onhcn
where whsoh in (700,711,721,731)
and IMGTADD = ''A''
and KEYVADD IN (786398200,786417600)
group by KEYVADD
') at nordic
下面是从上面的查询中检索到的一些测试数据。
KEYVADD | Status 0 | Status 2 | Status 4 | Status 5 | Status 7 | Status 8 | Status 9 | Customer | Container | Warehouse | Preorder
786398200 | 2018-04-30 13:07:53.8780000 | 2018-04-30 10:21:41.9330000 | 2018-04-30 13:08:18.8560000 | NULL | NULL | 2018-04-30 16:33:11.8850000 | NULL | test name | 27739742 | 721 | N
786417600 | 2018-04-30 13:07:53.9080000 | 2018-04-30 11:21:15.7810000 | 2018-04-30 13:08:18.8930000 | NULL | NULL | 2018-04-30 18:13:07.7940000 | NULL | test name 2 | 27739744 | 721 | N
如果我不希望第二个显示,因为状态 2 是在上午 11 点之后,我将其放在 And 语句中,那么问题就出在这个例子中,它只会删除时间并放置一个 Null结果不是我想要的。我怎样才能让它一起删除那个 ID?
抱歉,信息太多了,但希望它能清楚地说明我想要表达的意思。谢谢!
我想你会使用 having
:
having datepart(hour, min(case when VALUADD = 2 then STMPADD end)) >= 11
所以我要做的是从按 KEYVADD(ID) 分组的 CKDBAUDDP 中检索所有订单。然后我想做的只是 return 如果状态在特定日期范围内的订单。使用我目前拥有的代码,添加另一个 "and" 与 STMPADD 比较只会从已完成的查询中删除这些结果。这并不是我真正想要发生的事情,因为那时结果变得不那么清楚了。
exec(' select KEYVADD
,min(case when VALUADD=0 then STMPADD else null end) as "Status 0"
,min(case when VALUADD=2 then STMPADD else null end) as "Status 2"
,min(case when VALUADD=4 then STMPADD else null end) as "Status 4"
,min(case when VALUADD=5 then STMPADD else null end) as "Status 5"
,min(case when VALUADD=7 then STMPADD else null end) as "Status 7"
,min(case when VALUADD=8 then STMPADD else null end) as "Status 8"
,min(case when VALUADD=9 then STMPADD else null end) as "Status 9"
,min(nmdoh) as "Customer"
,min(c.scscn) as "Container"
,min(whsoh) as "Warehouse"
,min(preoh) as "Preorder"
from CKDBAUDDP a
left outer join mvpscohp h on left(a.KEYVADD,7) = h.ONHOH
left outer join mvpscnhp c on h.onhoh = c.onhcn
where whsoh in (700,711,721,731)
and IMGTADD = ''A''
and KEYVADD IN (786398200,786417600)
group by KEYVADD
') at nordic
下面是从上面的查询中检索到的一些测试数据。
KEYVADD | Status 0 | Status 2 | Status 4 | Status 5 | Status 7 | Status 8 | Status 9 | Customer | Container | Warehouse | Preorder
786398200 | 2018-04-30 13:07:53.8780000 | 2018-04-30 10:21:41.9330000 | 2018-04-30 13:08:18.8560000 | NULL | NULL | 2018-04-30 16:33:11.8850000 | NULL | test name | 27739742 | 721 | N
786417600 | 2018-04-30 13:07:53.9080000 | 2018-04-30 11:21:15.7810000 | 2018-04-30 13:08:18.8930000 | NULL | NULL | 2018-04-30 18:13:07.7940000 | NULL | test name 2 | 27739744 | 721 | N
如果我不希望第二个显示,因为状态 2 是在上午 11 点之后,我将其放在 And 语句中,那么问题就出在这个例子中,它只会删除时间并放置一个 Null结果不是我想要的。我怎样才能让它一起删除那个 ID?
抱歉,信息太多了,但希望它能清楚地说明我想要表达的意思。谢谢!
我想你会使用 having
:
having datepart(hour, min(case when VALUADD = 2 then STMPADD end)) >= 11