TSQL如何根据另一个值选择值

时间:2018-04-09 16:42:28

标签: sql tsql ssms ssms-2012

所以我试图根据另一列的值选择一个值。例如,在下面的表行中,我想选择ID列,其中没有任何特定值具有" Transferred"对于“状态”列。所以对于下面的行,只有值" DEF"将返回查询。我无法弄清楚如何做到这一点。

ID                    Status  
====                  ===========
ABCD                  Received    
ABCD                  Transferred    
XYZ                   Received
XYZ                   Transferred
DEF                   Received

3 个答案:

答案 0 :(得分:1)

您可以尝试使用NOT IN

   SELECT ID
    FROM YourTable 
    WHERE ID NOT IN (SELECT ID FROM YourTable WHERE Status = 'Transferred')

使用NOT EXISTS

的另一个选项
SELECT DISTINCT id 
FROM yourtable yt1
WHERE NOT EXISTS (SELECT * FROM yourtable yt2 WHERE yt1.id = yt2.id AND Status='Transferred') 

答案 1 :(得分:0)

给它一个旋转......

SELECT DISTINCT id 
FROM your_table_name
WHERE NOT EXISTS (SELECT id FROM your_table_name WHERE Status='Transferred') 

答案 2 :(得分:0)

另一种可能的解决方案:

declare @t table (ID varchar(4), Status varchar(11))
insert @t (ID, Status) VALUES 
('ABCD','Received'),
('ABCD','Transferred'),
('XYZ','Received'),
('XYZ','Transferred'),
('DEF','Received')    

select [ID], p.Received, isnull(p.Transferred,0) Transferred
FROM (select id, Status, count(1) cnt from @t group by id, status) t
PIVOT
(
     sum(cnt) for status in (Received,Transferred) 
) AS p
where Transferred is null or Transferred = 0

这样做的好处是可以在where子句中使用所有状态。我怀疑它是目前为止3个答案中效率最低的,但它可能很有用。