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



我有一个关于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中完成此任务。

如果每个PID始终存在A和B,则可以执行此操作

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

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

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

最新更新