SQL-запрос - Как подавить повторяющиеся значения в наборе результатов? - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь подавить повторяющиеся значения в столбце TotalCarton. Попытка заменить значение пустым или нулевым, но потерпела неудачу. Любая помощь?

Вот сценарий SQL:

SELECT ORDERS.StorerKey,
    ORDERS.OrderKey, 
    PackKey = (SELECT MAX(PackKey) FROM BAX_PACK_DTL WITH (NOLOCK) WHERE ORderKey = ORDERS.OrderKey),
    PackHU = BAX_PACK_DTL.OuterPackID,
    SalesOrderNum = ( SELECT Upper(Max(ORDERDETAIL.CustShipInst01)) FROM ORDERDETAIL WITH (NOLOCK) WHERE OrderKey = ORDERS.OrderKey),
    DeliveryNum = Upper(ORDERS.ExternOrderKey),     
    TotalCarton = ( CASE BAX_PACK_DTL.PackType WHEN 'C' THEN Count(DISTINCT(BAX_PACK_DTL.OuterPackID))
                    ELSE 0 END ),
    TotalPallet = ( CASE BAX_PACK_DTL.PackType WHEN 'P' THEN Count(DISTINCT(BAX_PACK_DTL.OuterPackID))
                    ELSE 0 END ),
    SumCarton = (SELECT COUNT(DISTINCT(OuterPackSeq)) FROM BAX_PACK_DTL WITH (NOLOCK) WHERE PackType = 'C' AND PackKey = '0000000211'),
    SumPallet = (SELECT COUNT(DISTINCT(OuterPackSeq)) FROM BAX_PACK_DTL WITH (NOLOCK) WHERE PackType = 'P' AND PackKey = '0000000211'),             
    AddWho = Upper(ORDERS.EditWho), 
    ORDERS.AddDate
FROM ORDERS WITH (NOLOCK) INNER JOIN ORDERDETAIL WITH (NOLOCK) ON ORDERS.StorerKey = ORDERDETAIL.StorerKey 
                AND ORDERS.OrderKey = ORDERDETAIL.OrderKey
            INNER JOIN PICKDETAIL WITH (NOLOCK) ON ORDERDETAIL.StorerKey = PICKDETAIL.StorerKey 
                AND ORDERDETAIL.OrderKey = PICKDETAIL.OrderKey
                AND ORDERDETAIL.OrderLineNumber = PICKDETAIL.OrderLineNumber
            INNER JOIN BAX_PACK_DTL WITH (NOLOCK) ON PICKDETAIL.OrderKey = BAX_PACK_DTL.OrderKey 
                AND PICKDETAIL.PickDetailKey = BAX_PACK_DTL.PickDetailKey
WHERE (SELECT COUNT(DISTINCT(ORDERKEY)) FROM PICKDETAIL WITH (NOLOCK) WHERE OrderKey = ORDERS.OrderKey ) > 0
AND BAX_PACK_DTL.PackKey = '0000000211'
AND BAX_PACK_DTL.OuterPackID IN 
('P111111111',
'P22222222',
'P33333333')
GROUP BY ORDERS.StorerKey,
    ORDERS.OrderKey, 
    ORDERS.ExternOrderKey,
    ORDERS.HAWB,
    ORDERS.SO,
    ORDERS.EditWho, 
    ORDERS.AddDate,
    PICKDETAIL.WaveKey,
    BAX_PACK_DTL.OuterPackID,
    BAX_PACK_DTL.PackKey,
    BAX_PACK_DTL.PackType
ORDER BY BAX_PACK_DTL.OuterPackID ASC

Ниже приведен текущий набор результатов на основе запроса выше. enter image description here

1 Ответ

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

Ваш код выглядит действительно странно. Я ожидаю, что запрос будет использовать условное агрегирование и будет выглядеть примерно так:

SELECT ORDERS.StorerKey, ORDERS.OrderKey, 
       PackKey = (SELECT MAX(PackKey) FROM BAX_PACK_DTL WITH (NOLOCK) WHERE ORderKey = ORDERS.OrderKey),
       PackHU = BAX_PACK_DTL.OuterPackID,
       SalesOrderNum = ( SELECT Upper(Max(ORDERDETAIL.CustShipInst01)) FROM ORDERDETAIL WITH (NOLOCK) WHERE OrderKey = ORDERS.OrderKey),
       DeliveryNum = Upper(ORDERS.ExternOrderKey),     
       TotalCarton = COUNT(DISTINCT CASE BAX_PACK_DTL.PackType WHEN 'C' THEN BAX_PACK_DTL.OuterPackID END),
       TotalPallet = COUNT(DISTINCT CASE BAX_PACK_DTL.PackType WHEN 'P' THEN BAX_PACK_DTL.OuterPackID END),
       SumCarton = (SELECT COUNT(DISTINCT(OuterPackSeq)) FROM BAX_PACK_DTL bpd WHERE pbd.PackType = 'C' AND pbd.PackKey = '0000000211'),
       SumPallet = (SELECT COUNT(DISTINCT(OuterPackSeq)) FROM BAX_PACK_DTL bpd WHERE pbd.PackType = 'P' AND pbd.PackKey = '0000000211'),             
       AddWho = Upper(ORDERS.EditWho), 
       ORDERS.AddDate
FROM . . .
GROUP BY ORDERS.StorerKey, ORDERS.OrderKey, Upper(ORDERS.ExternOrderKey),
         Upper(ORDERS.EditWho), ORDERS.AddDate;

Это может быть не точно. У вас нет точных имен столбцов, учитывая структуру таблицы, и вы используете очень сложный синтаксис запросов, смешивая подзапросы и агрегаты. Но это должно дать представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...