如何从sql server中的一个Record的多个值中仅获取指定的值记录

时间:2014-05-28 08:25:06

标签: sql sql-server database stored-procedures

我有一张桌子' 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

3 个答案:

答案 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

SQLFiddle demo

答案 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