我的桌子:
LoanItemCode Quantity ItemDesc ItemWeight Karat
JAR002 1 Ring 1.60 18
JAR003 6 dh 7.00 18
ContractID EffectiveDate
60 2016-10-12
61 2016-10-12
62 2016-10-13
63 2016-10-13
我想看到这个输出:
LoanItemCode Quantity ItemDesc ItemWeight Karat EffectiveDate
JAR002 1 Ring 1.60 18 2016-10-12
JAR003 6 dh 7.00 18 2016-10-13
我尝试了什么:
SELECT LoanItemCode ,Quantity, ItemDesc, ItemWeight, ISNULL(ItemKarat,0) as 'Karat', MAX(EffectiveDate)
FROM tblLoanContract
LEFT JOIN tblLoanItemDetails
LEFT JOIN tblLoanItem
LEFT JOIN tblItemType
ON tblLoanItem.ItemTypeID = tblItemType.ItemTypeID
ON tblLoanItemDetails.LoanItemID = tblLoanItem.LoanItemID
ON tblLoanContract.ContractID = tblLoanItemDetails.LoanContractID
WHERE ItemStatusID = 5
-My code
答案 0 :(得分:0)
看起来你有3个问题。
您的联接语法不正确。联接的ON
部分必须与JOIN
部分保持一致。
您在不使用分组的情况下在多个字段之一上使用聚合。使用max()
之类的聚合函数后,所有其他字段也必须使用聚合(例如min()
,sum()
)或包含在GROUP BY
子句中。
您尚未在生效日期添加别名。 Max()
会生成一个未命名的列。
另一个建议是在联接中使用表别名。我发现它使连接语法更加清晰,并且当有多个连接表时,也更容易理解来自哪些表字段。
这有用吗?如果没有,您将不得不提供有关其他2个表的更多详细信息。
SELECT lid.LoanItemCode, lid.Quantity, lid.ItemDesc, lid.ItemWeight,
ISNULL(lid.ItemKarat,0) as 'Karat', MAX(lc.EffectiveDate) EffectiveDate
FROM tblLoanContract lc
LEFT JOIN tblLoanItemDetails lid
ON lc.ContractID = lid.LoanContractID
LEFT JOIN tblLoanItem li
ON lid.LoanItemID = li.LoanItemID
LEFT JOIN tblItemType it
ON li.ItemTypeID = it.ItemTypeID
WHERE ItemStatusID = 5 --I'm not sure what table this comes from so no table alias here
GROUP BY lid.LoanItemCode, lid.Quantity, lid.ItemDesc, lid.ItemWeight,
ISNULL(lid.ItemKarat,0)
ORDER BY lid.LoanItemCode;