2017-10-12 108 views
0

我已经使用下面的子查询从我的查询中返回每个(文档号)的最大数据,但它只返回一条记录,而我有很多记录。子查询不能正常工作

SELECT tblTransmittals.[Owner Document Number] 
     , tblTransmittals.[Int-Tr- NO] 
     , tbltransmittalNo.[Internal-Tr-Date] 

FROM tblTransmittals 
INNER JOIN tbltransmittalNo 
    ON tblTransmittals.[Int-Tr- NO] = tbltransmittalNo.[Int-Tr-NO] 
WHERE (((tbltransmittalNo.[Internal-Tr-Date])= 
     (SELECT Max(A.[Internal-Tr- Date]) 
     FROM (SELECT tblTransmittals.[Owner Document Number] 
        , tbltransmittalNo. [Internal-Tr-Date] 
       FROM tblTransmittals 
       INNER JOIN tbltransmittalNo 
        ON tblTransmittals.[Int-Tr-NO] = tbltransmittalNo.[Int-Tr-NO] 
      ) AS A 
     WHERE A.[owner Document Number]=[tblTransmittals].[Owner Document Number]))); 

我的意思是,如果查询的数据如下图所示:

Owner Document Number Int-Tr-NO   Internal-Tr-Date 

    doc-0001    tt-0003   12-0ct-2017 
    doc-0005    tt-0100   18-sep-2015 

我想和检查一切,但我不知道:

Owner Document Number Int-Tr-NO   Internal-Tr-Date 
    doc-0001    tt-0002   10-oct-2016 
    doc-0001    tt-0003   12-0ct-2017 
    doc-0005    tt-0100   18-sep-2015 

我会使用子查询返回后喜欢为什么不工作?

+0

为什么标签为Access?这确实看起来像SQL服务器给我。 –

回答

0

不完全清楚你想在这里,我假设这是SQL服务器。想你想要这样的事情。

select * 
from 
(
    SELECT t.[Owner Document Number] 
      , t.[Int-Tr- NO] 
      , tn.[Internal-Tr-Date] 
      , RowNum = ROW_NUMBER() over (partition by t.[Owner Document Number] order by tbltransmittalNo.[Internal-Tr-Date] desc) 
    FROM tblTransmittals t 
    INNER JOIN tbltransmittalNo tn ON t.[Int-Tr- NO] = tn.[Int-Tr-NO] 
) x 
where x.RowNum = 1 
+0

谢谢,是否有可能通过使用子查询来回答这个问题,实际上我想知道我的代码是什么问题。 –

+0

我没有用子查询来做到这一点。 –

+0

我想他不知道你需要什么。 – Sami

0
SELECT tblTransmittals.[Owner Document Number], tblTransmittals.[Int-Tr-NO], tbltransmittalNo.[Internal-Tr-Date] 

FROM tblTransmittals INNER JOIN tbltransmittalNo ON tblTransmittals.[Int-Tr-NO] = tbltransmittalNo.[Int-Tr-NO] 

WHERE (((tbltransmittalNo.[Internal-Tr-Date])= 

(SELECT Max([Internal-Tr-Date]) 

FROM (SELECT T.[Owner Document Number], T.[Int-Tr-NO], TN.[Internal-Tr-Date] 
FROM tblTransmittals AS T LEFT JOIN tbltransmittalNo AS TN ON T.[Int-Tr-NO] = TN.[Int-Tr-NO]) AS A 

WHERE A.[owner Document Number]=[tblTransmittals].[Owner Document Number]))); 
0

您所查询的是完全不正确的,因为它只能返回一行由于MAX()在你的子查询:

(SELECT Max(A.[Internal-Tr- Date]) 
    FROM (SELECT tblTransmittals.[Owner Document Number], tbltransmittalNo. [Internal-Tr-Date] 
FROM tblTransmittals INNER JOIN tbltransmittalNo 
ON tblTransmittals.[Int-Tr-NO] = tbltransmittalNo.[Int-Tr-NO]) AS A 
WHERE A.[owner Document Number]=[tblTransmittals].[Owner Document Number]); 
##this query only returns 1 value 

在上面的场景中,MAX()查询将返回“12-0ct-2017”,您的最终查询将如下所示:

SELECT tblTransmittals。[Owner Document Number],tblTransmittals。[Int-Tr- NO],tbltransmittalNo。[Internal-Tr-Date] FROM tblTransmit技援INNER JOIN tbltransmittalNo ON tblTransmittals。[中间体TR- NO] = tbltransmittalNo。[中间体TR-NO] WHERE(((tbltransmittalNo。[内部-TR-日期])= '20171012'

I” m猜测你想在每个[所有者文档号码]上返回最大值(日期),所以我会这样做:

SELECT A. [所有者文档号码],A. [Int-Tr- NO], B. [Internal-Tr-Date] FROM tblTransmittals as A INNER JOIN tbltransmittal No as B ON A. [Int-Tr- NO] = B [Int-Tr-NO] JOIN (SELECT C. [数字],最大(D [内部 - 交易日期]) 从tblTransmittals作为C INNER JOIN tbltransmittal No D ON C. [Int-Tr-NO] = D. [Int-Tr-NO] GROUP BY C. [所有者文件编号])AS E ON A. [所有者文件编号] = E. [所有者文件编号] 和B. [Internal-Tr-Date] = E. [内部交易日期]

祝你好运。

+0

如果您在我的答案中查看修改过的代码,我已经使用别名,您会发现它是正确的,并且它会为每个[所有者文档编号]返回最大值(日期)。我检查了我的笔记本电脑,它是正确的。 –