2017-10-12 174 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

如果您在我的答案中查看修改過的代碼,我已經使用別名,您會發現它是正確的,並且它會爲每個[所有者文檔編號]返回最大值(日期)。我檢查了我的筆記本電腦,它是正確的。 –