2017-08-17 142 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