我对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中完成此任务。
答案 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;