所以我试图根据另一列的值选择一个值。例如,在下面的表行中,我想选择ID列,其中没有任何特定值具有" Transferred"对于“状态”列。所以对于下面的行,只有值" DEF"将返回查询。我无法弄清楚如何做到这一点。
ID Status
==== ===========
ABCD Received
ABCD Transferred
XYZ Received
XYZ Transferred
DEF Received
答案 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个答案中效率最低的,但它可能很有用。