获取已结束的所有记录

时间:2014-05-12 11:56:45

标签: sql sql-server

我有一个简单的表格,其中有两列uidisEndeduid可以在此表格中多次出现,其值可以为01。对于每个唯一0,值uid只能出现一次。

例如:


| uid  | isEnded |
------------------
| 1    | 1       |
| 1    | 1       |
| 1    | 0       |
| 2    | 1       |
| 2    | 1       |
| 3    | 0       |
| 3    | 1       |
------------------

我需要的是一个选择所有uid所有isEnded值设置为1的{​​{1}}的查询。

所以在上面的例子中,我应该只返回uid 2。因为其他两个uid仍然将isEnded设置为0

我可以通过什么样的查询获得这样的结果?因此,只有uidisEnded值不能设置为0

5 个答案:

答案 0 :(得分:2)

好吧,如果您要选择的1的所有值都应为uid,那么这也意味着最小值也将为1

SELECT uid
FROM table
GROUP BY uid
HAVING MIN(isEnded) = 1

答案 1 :(得分:1)

尝试以下查询:

 SELECT DISTINCT uid  
   FROM #Tab  
  WHERE UID NOT IN
        (SELECT uid FROM #tab WHERE isended = 0)

答案 2 :(得分:0)

这应该可以解决问题

 SELECT uid
   FROM table t1
  WHERE NOT EXISTS
        (SELECT *
           FROM table t2
          WHERE t2.uid=t1.uid
            AND isEnded=0)

答案 3 :(得分:0)

CREATE TABLE A 
(
    uids int,
    isEnded bit 
) 
go

 INSERT INTO A 
 VALUES (1,1),
        (1,1),
        (1,0),
        (2,1),
        (2,1),
        (3,0),
        (3,1)

 SELECT A.uids, A.isended
   FROM A
  WHERE A.uids NOT IN
        (SELECT A.uids FROM A WHERE A.isended = '0') 

如果您需要不同的记录,请在选择查询中使用distinct关键字,如下所示:

SELECT DISTINCT A.uids, A.isended
  FROM A
 WHERE A.uids NOT IN
       (SELECT A.uids FROM A WHERE A.isended = '0')

答案 4 :(得分:0)

我会为你做这件事:

 SELECT t.uid
   FROM YourTable AS t
  GROUP BY t.uid
 HAVING MIN(t.isEnded) = 1;

group by会将特定uid的所有行视为一个块。 having为该块设置条件。

编辑:该死的! @Damien打败了我。