Как получить значения флага на основе условий в SQL Server - PullRequest
0 голосов
/ 15 октября 2018

У меня есть вопрос о SQL Server: как получить значения флагов на основе pid?

Если значения имени A и значения имени B, соответствующие значениям идентификатора, равны 1, тогда флаг 1 в противном случае 0

CREATE TABLE [dbo].[TABLECHECK]
(
    [ID] [INT] NULL,
    [NAME] [VARCHAR](50) NULL,
    [PID] [INT] NULL
) ON [PRIMARY]
GO    

INSERT INTO [dbo].[TABLECHECK] ([ID], [NAME], [PID]) 
VALUES (1, N'A', 1), (0, N'B', 1), (1, N'A', 2),
       (1, N'B', 2), (0, N'A', 3), (0, N'B', 3)

На основании этих данных я хочу получить вывод, подобный следующему:

PID  | Flag
-----+-------
1    | 0
2    | 1
3    | 0

Мой запрос:

select 
    pid, count(id),
    case 
       when name in ('a', 'b') and id = 1 
          then 1 
          else 0 
    end 
from
    [TABLECHECK]  
group by 
    pid

Этот запрос приводит к ошибке.

Скажите, пожалуйста, как выполнить эту задачу в SQL Server.

Ответы [ 2 ]

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

Поскольку вы используете SQL Server 2012, вы можете использовать MIN(), IIF() и GROUP BY

SELECT  PID,
        IIF(MIN(ID) = 1, 1, 0) Flag
FROM    TABLECHECK 
GROUP BY PID;
0 голосов
/ 15 октября 2018

Если A & B всегда существует для PID, вы можете сделать это

SELECT  PID,
        Flag    = CASE WHEN MIN(ID) = 1 THEN 1 ELSE 0 END
FROM    TABLECHECK 
GROUP BY PID
...