从多个中选择单行

时间:2016-10-06 10:14:03

标签: sql sql-server

这是我的SQL查询

SELECT 
    a.recordID b.recordState
FROM
    RecordTable a
INNER JOIN 
    RecordStateTable b ON a.recordID = b.recordID

此查询的输出是

RecordID      RecordState
--------------------------
record1       passed
record2       passed
record3       passed
record3       failed
record4       passed

在结果中我得到 record3 的两个值,即传递和失败。我想丢弃具有传递和失败值的行,并仅选择失败的行。

我需要在最终结果中仅获得record1record2record4。我不想要record3,因为它包含传递和失败的值。

2 个答案:

答案 0 :(得分:4)

有几种方法,一种是使用GROUP BY

select RecordID, max(RecordState)
from RecordTable a
inner join RecordStateTable b
    on a.recordID = b.recordID
group by RecordID

因为通过>会工作失败。

答案 1 :(得分:0)

您的JOIN是不必要的。编写查询的最简单方法是:

SELECT rst.recordID, MAX(rst.recordState) as recordState
FROM RecordStateTable rst
GROUP BY rst.recordID;

注意:

  • 使用表别名缩写的表别名。这样可以更轻松地阅读查询。
  • 您需要GROUP BY
  • JOIN是不必要的,因为recordIDrecordState位于同一个表格中。