Создать новую базу статусов столбцов для критерия в том же столбце с условием - PullRequest
0 голосов
/ 02 октября 2018

у меня есть следующие данные

DECLARE @TBL TABLE (CustomerID INT, CustomerName VARCHAR(100),Product VARCHAR(100), Status_Col VARCHAR(100))
-- INSERT DATA
INSERT INTO @TBL VALUES     (90,'Wilman Kala','Dairy','Simple'),
    (90,'Wilman Kala','Grain','Other'), (90,'Wilman Kala','Dairy','Other'), (81,'Hipermercados','Produce','Simple'),
    (81,'Hipermercados','Produce','Other'), (34,'Hanari Carnes','Seafood','Simple'),(34,'Hanari Carnes','Produce','Simple'),
    (34,'Hanari Carnes','Condiments','Simple'), (85,'Smith stock','Grains','Other'),    (86,'Jane will','Cereals','Other'),
    (87,'Victuailles en stock','Condiments','Simple'),  (88,'Suprêmes délices','Confections','Other'),
    (88,'Suprêmes délices','Dairy','Other'),    (89,'Marry Dawson','Dairy','Simple'),(90,'Eve Lawson','Dairy','Other'),
    (91,'Hanari Carnes','Beverages','Other'),   (91,'Hanari Carnes','Confections','Other'),
    (92,'Mark Johnson','Beverages','Other');

Я хочу создать новый столбец, в котором будут показаны клиенты, у которых «просто», а затем «просто» из Status_Col, если у них есть «другое», то «Другой'.Однако, если у них есть «простой» или другой »на каком-либо этапе столбца Status_Col, тогда я хочу, чтобы NewStatus показывал его Other/Simple. In my data CustomerID 81 and 90 should show Другое / Простое

Я пробовал запрос ниже:не дает мне правильный ответ

SELECT CustomerID,CustomerName,Product,
Status_Col,
CASE WHEN Status_Col='Other' THEN 'Other'
     WHEN Status_Col='Simple' THEN 'Simple'
     WHEN Status_Col='Other' OR Status_Col='Simple' THEN 'Other/Simple' END AS NewStatus
FROM @TBL
order by CustomerName

Токовый выход

CustomerID  CustomerName            Product         Status_Col  NewStatus
90           Eve Lawson             Dairy              Other      Other
91           Hanari Carnes          Beverages          Other      Other
91           Hanari Carnes          Confections        Other      Other
34           Hanari Carnes          Seafood            Simple     Simple
34           Hanari Carnes          Produce            Simple     Simple
34           Hanari Carnes          Condiments         Simple     Simple
81           Hipermercados          Produce            Simple     Simple
81           Hipermercados          Produce            Other      Other
86           Jane will              Cereals            Other      Other
92           Mark Johnson           Beverages          Other      Other
89           Marry Dawson           Dairy              Simple     Simple
85           Smith stock            Grains             Other      Other
88           Suprêmes délices       Confections        Other      Other
88           Suprêmes délices       Dairy              Other      Other
87           Victuailles en stock   Condiments         Simple     Simple
90           Wilman Kala            Dairy              Simple     Simple
90           Wilman Kala            Grain              Other      Other
90           Wilman Kala            Dairy              Other      Other

Ожидаемый выход

CustomerID  CustomerName            Product         Status_Col  NewStatus
90           Eve Lawson             Dairy              Other      Other
91           Hanari Carnes          Beverages          Other      Other
91           Hanari Carnes          Confections        Other      Other
34           Hanari Carnes          Seafood            Simple     Simple
34           Hanari Carnes          Produce            Simple     Simple
34           Hanari Carnes          Condiments         Simple     Simple
81           Hipermercados          Produce            Simple   Other/Simple
81           Hipermercados          Produce            Other    Other/Simple
86           Jane will              Cereals            Other      Other
92           Mark Johnson           Beverages          Other      Other
89           Marry Dawson           Dairy              Simple     Simple
85           Smith stock            Grains             Other      Other
88           Suprêmes délices       Confections        Other      Other
88           Suprêmes délices       Dairy              Other      Other
87           Victuailles en stock   Condiments         Simple     Simple
90           Wilman Kala            Dairy              Simple   Other/Simple
90           Wilman Kala            Grain              Other    Other/Simple
90           Wilman Kala            Dairy              Other    Other/Simple

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Вы можете использовать коррелированный подзапрос:

SELECT CustomerID,CustomerName,Product,
Status_Col,
CASE WHEN (
            SELECT COUNT(DISTINCT Status_Col) 
            FROM @TBL AS T1 
            WHERE T0.CustomerID = T1.CustomerID 
            AND T0.CustomerName = T1.CustomerName
           ) > 1 THEN 'Other/Simple'
     WHEN Status_Col='Other' THEN 'Other'
     WHEN Status_Col='Simple' THEN 'Simple' END AS NewStatus
FROM @TBL AS T0
order by CustomerName

Однако мне интересно, почему у вас несколько имен клиентов для одного и того же идентификатора клиента.

0 голосов
/ 02 октября 2018

Ваше выражение CASE не имеет особого смысла (окончательное выражение никогда не будет истинным, поскольку одно из предыдущих выражений уже должно было быть истинным).Кажется, вы пытаетесь проверить значения других строк, не обращаясь к набору данных в целом.

Похоже, что вы хотите получить ответ:

SELECT CustomerID,
       CustomerName,
       Product,
       Status_Col,
       CASE WHEN COUNT(CASE Status_Col WHEN 'Simple' THEN 1 END) OVER (PARTITION BY CustomerID, CustomerName) > 0
             AND COUNT(CASE Status_Col WHEN 'Other' THEN 1 END) OVER (PARTITION BY CustomerID, CustomerName) > 0 THEN 'Other/Simple'
            ELSE Status_Col --If both values don't appear, then it must be the current one
        END AS NewStatus
FROM @TBL
order by CustomerName;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...