我有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
答案 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