【问题标题】:How to get only specified values record from multiple values of one Record in sql server如何从sql server中一条记录的多个值中仅获取指定值记录
【发布时间】:2014-05-28 08:25:05
【问题描述】:

我有一个如下表'DEMO',我需要在我的选择查询中指定一些结果

 PID   Is_Viewed
  1      False          
  1      False     
  1      False      
  1      False  
  2      True
  2      False

现在我只需要选择那些即使只有一个值“真”的记录,那么在选择语句中结果将为 1 否则为 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

【问题讨论】:

  • 顺便说一句,sql server 里有一个位类型,用来管理布尔值...
  • Is_Viewed 类型是什么(位或整数)?
  • ya.. 它也是表中的位类型,表示真/假的形式

标签: sql sql-server database stored-procedures


【解决方案1】:

可能是这样的:

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

【讨论】:

  • 感谢您的回复....但它不起作用。对于 PId 1,它给出的结果是 1,但它应该给它 0
  • @user3403003 :更新了答案
  • 对不起老兄...实际上我已经对表进行了更改并考虑了旧表。谢谢...它正在工作.. :)
【解决方案2】:

我猜Is_Viewed 被定义为bit 类型,因为 SQL Server 没有 BOOLEAN 类型。然后试试这个:

SELECT PID,
       MAX(CAST(Is_Viewed as INT)) as Is_Viewed 
FROM T
GROUP BY PID

SQLFiddle demo

【讨论】:

    【解决方案3】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多