使用多个连接时有明显的价值

时间:2017-05-12 13:56:46

标签: sql-server

我想获得一行,但它返回3行。 form_audit表有3行,具有相同的REF_NO, 如何获得一个不同的行?

2 个答案:

答案 0 :(得分:0)

希望这会让你知道它是如何运作的

CREATE TABLE #tblBackers (
amountBacked MONEY, 
backersAccountID INT,
playerBacked INT,
Dates DATETIME)

INSERT INTO #tblBackers VALUES (25,12345,99999,GETDATE())
INSERT INTO #tblBackers VALUES (25,12345,99999,GETDATE())
INSERT INTO #tblBackers VALUES (25,12345,99699,GETDATE())
INSERT INTO #tblBackers VALUES (25,12345,99999,GETDATE())
INSERT INTO #tblBackers VALUES (25,98765,88888,GETDATE())
INSERT INTO #tblBackers VALUES (25,76543,77777,GETDATE())

GO

SELECT DISTINCT * FROM #tblBackers

SELECT DISTINCT TOP 1 * FROM #tblBackers

并使用ORDER BY获取最新记录。

答案 1 :(得分:0)

如果您只需要每ref_no条记录一条记录,请考虑在该字段上添加group by条款。

select 
    fa.ref_no
    /*, other stuff*/
from
    FORM_AUDIT fa
    /* other joins*/
group by
    fa.ref_no;

请记住,此group by子句会将共享相同ref_no的所有记录聚合到结果集中的单个记录中。这意味着您不能再直接在选择列表中包含fh.*fcd.*等字段,因为您无法保证每个字段在结果集中每行只有一个值。对于要包含在选择列表中的每个此类字段,您必须:

  • group by子句中包含该字段,请注意,这样做不再一定会为每个不同的ref_no提供一行;现在,每个ref_no的不同组合以及您添加到group by子句中的任何其他组合,或

  • ,您将获得一行
  • 使用SQL Server的aggregate functions之一将您要添加的字段中的零对多值转换为单个值。聚合函数包括max()sum()count()等。链接上有完整的列表。

祝你好运!