как удалить все результаты, относящиеся к групповому идентификатору, если один из результатов не прошел тест - PullRequest
0 голосов
/ 04 мая 2018

Итак, я пытаюсь получить все заказы из CKDBAUDDP, сгруппированные по KEYVADD (ID). Что я тогда хочу сделать, это только вернуть заказ, если статус находится в пределах определенного диапазона дат. с помощью кода, который у меня сейчас есть, добавление еще одного «и» в сравнении 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 в результаты, которые не то, что я хочу. Как я могу получить это, чтобы удалить этот идентификатор все вместе?

Извините, это слишком много информации, но, надеюсь, ясно, что я пытаюсь донести. Спасибо!

1 Ответ

0 голосов
/ 04 мая 2018

Я думаю, вы бы использовали having:

having datepart(hour, min(case when VALUADD = 2 then STMPADD end)) >= 11
...