如何根据SQL Server中的条件获取标志值

时间:2018-10-15 06:46:29

标签: sql-server sql-server-2012

我对SQL Server有一个疑问:如何基于pid获取标志值?

如果名称值A和名称值B对应的id值为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 :(得分:1)

如果每个PID始终存在A和B,则可以这样做

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

答案 1 :(得分:0)

由于使用的是SQL Server 2012,因此可以使用MIN()IIF()GROUP BY

SELECT  PID,
        IIF(MIN(ID) = 1, 1, 0) Flag
FROM    TABLECHECK 
GROUP BY PID;