SQL - 如果不存在其他值,则选择列值

时间:2016-10-13 15:09:37

标签: sql sql-server

我在SQL中有一个查询设计如下:

Column A    Column B    Column C
Mary               24             First 
Mary               25             Second
Paul                5             First 
Tim             1             Second

我想用" First"返回所有行在C列中,以及" Second"只有它没有相应的" First"基于A栏的价值。所以我想看看:

Mary 24
Paul 5
Tim 1

我已经尝试了Case语句和If语句,但无法使其发挥作用。有什么建议吗?

2 个答案:

答案 0 :(得分:8)

以下是使用ROW_NUMBER

的一个技巧
SELECT * FROM 
(
SELECT * , ROW_NUMBER()OVER(PARTITION BY [Column A] ORDER BY [Column C] ASC) RN
FROM TableName
) A
WHERE RN = 1

按字母顺序F位于S之前,因此行号1将分配给First。如果First不存在,则1将被分配到Second

答案 1 :(得分:0)

一个简单的答案是使用NOT IN。

所以,当C列= First OR C = Second时,这会占用所有人,而且他们没有其他的首次出现)

SELECT [Column A], [Column B]
FROM tableName
WHERE [Column C] = 'First'
OR 
([Column C] = 'Second'
AND [Column A] NOT IN (
    SELECT DISTINCT [Column A] 
    FROM tableName 
    WHERE [Column C] = 'First'))

我不确定它在速度方面是否有效,但它很容易理解。

我现在无法测试,所以如果我犯了错误,请发表评论。