Элементы строки проверки состояния SQL - PullRequest
0 голосов
/ 25 сентября 2018

Я действительно новичок в sql / stackoverflow в целом, поэтому терпите меня.

У меня есть отдельный запрос на выборку, который возвращает следующий результат

Name  Surname  Name2  Surname2  Status
----  -------  -----  --------  ------
Peter  Parker  Mary     Jane       0
Peter  Parker  Felicia  Hardy      1
Peter  Parker  Felicia  Hardy      0
Peter  Parker  Jonah   Jameson     1

Так что, очевидно, каждый запрос будетесть разные имена.Я хотел бы показать, что если у первого и второго человека есть только одна строка, если 0 идентификатору нравится показывать законченное сообщение, если его 1 -> неполное, и если у них есть 2 строки (0 и 1), я быхотел бы показать рабочее сообщение.

Name  Surname  Name2  Surname2  Status
----  -------  -----  --------  ------
Peter  Parker  Mary     Jane    Finished
Peter  Parker  Felicia  Hardy   Working
Peter  Parker  Jonah    Jameson Incomplete

Как мне поступить об этом?

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

Вы можете использовать group by Name, Surname, Name2, Surname2 с avg(status) параметрами

select Name, Surname, Name2, Surname2, 
       ( case when avg(Status) = 1 then 
         'Incomplete'
         when avg(Status) = 0 then
         'Finished'
         else
         'Working'
       end ) as status 
  from tab
group by Name, Surname, Name2, Surname2; 

Демонстрация SQL Fiddle

0 голосов
/ 25 сентября 2018

случай использования с агрегатной функцией

    select Name,Surname,Name2,Surname2,
case when count( distinct Status) = 2 then 
         'Working' when sum(Status)=0 then 'Finished' else 'Incomplete'

       end  as status 
  from t
group by Name, Surname, Name2, Surname2;


NAME    SURNAME     NAME2   SURNAME2    STATUS
Peter   Parker      Mary    Jane         Finished
Peter   Parker      Felicia Hardy        Working
Peter   Parker     Jonah    Jameson      Incomplete
0 голосов
/ 25 сентября 2018

Вы можете использовать это

SELECT name, surname, name2, surname2, 
    CASE 
        WHEN COUNT(DISTINCT status) = 2 THEN 'Working'
        WHEN MAX(status) = 1 THEN 'Incomplete' 
        WHEN MAX(status) = 0 THEN 'Finished'
    END AS status
FROM table_name
--WHERE status IN (0, 1)
GROUP BY name, surname, name2, surname2
ORDER BY name, surname, name2, surname2;

Или это:

SELECT name, surname, name2, surname2, 
    CASE
        WHEN MIN(status) = 1 THEN 'Incomplete' 
        WHEN MAX(status) = 0 THEN 'Finished'
        ELSE 'Working'
    END AS status
FROM table_name
WHERE status IN (0, 1)
GROUP BY name, surname, name2, surname2
ORDER BY name, surname, name2, surname2;

Если у вас есть только 2 статуса 0 и 1, тогда пропустите предложение WHERE

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