отдельный (varchar) и имеющий пункты в SQL операторе Server CASE - PullRequest
0 голосов
/ 26 февраля 2020
SELECT
    CASE 
       WHEN Max([Status]) = 'COMPLETED' 
          THEN 'COMPLETED'
       WHEN MAX([Status]) != 'COMPLETED' 
            AND (DENSE_RANK() OVER (PARTITION BY Branch, Place ORDER BY [priority])) < 4 
          THEN 'CURRENT'
       ELSE 'INCOMPLETE' 
    END AS [STATUS]
FROM 
    TEMP_JOB

Мои данные такие, я пытаюсь это сделать на SQL Сервер

Branch  Place   Item    Status
------|------|-------|--------------------
B1      P1      I1      COMPLETE
B1      P1      I1      COMPLETE
B1      P1      I2      COMPLETE
B1      P1      I2      COMPLETE
B1      P1      I2      INPROGRESS
B1      P1      I3      INPROGRESS
B1      P1      I3      INPROGRESS

Мне нужны данные для консолидации следующим образом. Для каждой ветви и места, если все элементы с одинаковым номером элемента являются полными, тогда статус должен быть Завершенным, если хотя бы одна строка элемента является InProgress, тогда статус должен отображаться как INPROGRESS

Branch  Place   Item    Status
------|-------|-------|--------------------
B1      P1      I1      COMPLETE
B1      P1      I2      INPROGRESS
B1      P1      I3      INPROGRESS

Я пробовал несколько операторов case, но результат не верный.

введите описание изображения здесь

1 Ответ

0 голосов
/ 27 февраля 2020

Из тех же данных и ожидаемых результатов работает следующий запрос:

SELECT Branch,Place,Item,
  CASE WHEN COUNT(DISTINCT Status) =1 THEN MAX(Status)
    ELSE N'INPROGRESS'
  END AS [Status]
FROM TEMP_JOB
GROUP BY Branch,Place,Item;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...