详细信息表中的SQL Server值

时间:2017-08-17 06:14:07

标签: sql sql-server

我有2个表ItemMaster和ItemDetail,我正在创建一个报告来显示两个表中的列。

我想显示“ItemMaster”表中的前3列,然后显示“ItemDetail”表中的Max(FinishDate)和Max(Amount)。

我尝试按以下书面查询生成结果,但无效。

请帮忙 感谢

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

现在,您可以在JOIN字段上执行正确的ItemCode

答案 2 :(得分:0)

没有必要的子选择,imho。只需像在单个表上一样加入两个表并进行聚合:

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
相关问题