我有一张桌子' DEMO'如下所示,我在选择查询中需要一些指定的结果
PID Is_Viewed
1 False
1 False
1 False
1 False
2 True
2 False
现在我只需要选择那些甚至只有一个值的记录' True'然后结果将是选择参数中的其他0。我已经尝试了很多但没有得到理想的结果......我的查询是
/// select statement
SELECT distinct PId,CASE WHEN EXISTS(Select Is_Viewed from DEMO where Is_viewed=1) then 1 else 0 end as Is_viewed FROM DEMO
i WANT result like
PId Is_Viewed
1 0
2 1
答案 0 :(得分:3)
也许是这样的:
SELECT
PId,
MAX(CASE WHEN Is_Viewed='True' THEN 1 ELSE 0 END) AS Is_Viewed
FROM
DEMO
GROUP BY
PId
修改强>
考虑您提供的数据。
DECLARE @tbl TABLE(PID INT,Is_Viewed VARCHAR(10))
INSERT INTO @tbl
VALUES
(1,'False'),
(1,'False'),
(1,'False'),
(1,'False'),
(2,'True'),
(2,'False')
使用此查询
SELECT
PId,
MAX(CASE WHEN Is_Viewed='True' THEN 1 ELSE 0 END) AS Is_Viewed
FROM
@tbl AS tbl
GROUP BY
PId
输出是这样的:
PId Is_Viewed
1 0
2 1
答案 1 :(得分:0)
我想Is_Viewed
被定义为bit
类型,因为SQL服务器没有BOOLEAN类型。然后试试这个:
SELECT PID,
MAX(CAST(Is_Viewed as INT)) as Is_Viewed
FROM T
GROUP BY PID
答案 2 :(得分:0)
DECLARE @tbl TABLE(PID INT,Is_Viewed VARCHAR(10))
INSERT INTO @tbl
VALUES
(1,'False'),
(1,'False'),
(1,'False'),
(1,'False'),
(2,'True'),
(2,'False')
select distinct t.PID,
CASE WHEN t.Is_Viewed = 'TRUE'
THEN 1 ELSE 0 END As PType from @tbl t
INNER JOIN
(Select MIN(PID)As PID,Is_Viewed
FROM @tbl
GROUP BY Is_Viewed)AS KK
ON KK.PID = t.PID
AND KK.Is_Viewed = t.Is_Viewed