2017-08-17 199 views
-1

我有2個表ItemMaster和ItemDetail,我正在創建一個報表來顯示兩個表中的列。詳細信息表中的SQL Server值

我想顯示「ItemMaster」表中的前3列,然後顯示「ItemDetail」表中的Max(FinishDate)和Max(金額)。

我試圖產生結果如下面的書面查詢,但不工作。

請幫 感謝

SELECT IM.ItemCode, 
     IM.Customer, 
     IM.FinYear, 
     DET.FinishDate, 
     DET.Amount 
FROM ItemMaster AS IM 
INNER JOIN (SELECT MAX(FinishDate) AS FinishDate, MAX(Amount) AS Amount 
       FROM ItemDetail ID 
       WHERE IM.ItemCode = ID.ItemCode) AS DET 
ON IM.ItemCode = DET.ItemCode 

enter image description here

+2

請貼預期與實際結果爲DDL,而不是圖像 – TheGameiswar

+0

請看看這個鏈接瞭解更多關於如何提高的問題: https://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ – TheGameiswar

回答

0

您需要修改派生表的查詢一點點,以便包括GROUP BY條款:

SELECT IM.ItemCode, 
     IM.Customer, 
     IM.FinYear, 
     DET.FinishDate, 
     DET.Amount 
FROM ItemMaster AS IM 
INNER JOIN (SELECT ID.ItemCode, 
        MAX(FinishDate) AS FinishDate, MAX(Amount) AS Amount 
       FROM ItemDetail ID 
       GROUP BY ID.ItemCode) AS DET 
ON IM.ItemCode = DET.ItemCode 

現在您可以在ItemCode字段中做適當的JOIN

+0

感謝您的幫助,您提供的解決方案也起作用 – Nadeem

+0

作爲一種表現,您提供的解決方案是最好的。 – Nadeem

0

試試這個:

SELECT IM.ItemCode , 
      IM.Customer , 
      IM.FinYear , 
      DET.FinishDate , 
      DET.Amount 
    FROM ItemMaster AS IM 
      CROSS APPLY (SELECT MAX(FinishDate) AS FinishDate , 
            MAX(Amount) AS Amount 
          FROM  ItemDetail ID 
          WHERE  ID.ItemCode = IM.ItemCode 
         ) AS DET 
+0

感謝您的幫助,您提供的解決方案正常工作 – Nadeem

0

沒有子選擇需要,恕我直言。剛剛加入這兩個表和彙總,你會做一個表:

select im.ItemCode, im.Customer, im.FinYear, 
     MAX(id.FinishDate), MAX(id.Amount) 
    from ItemMaster im 
    join ItemDetail id 
    on im.ItemCode = id.ItemCode 
    group by im.ItemCode, im.Customer, im.FinYear 
+0

感謝您的幫助,您提供的解決方案工作 – Nadeem