连接SQL Server上的两个表
我有两个SQL Server表:连接SQL Server上的两个表,sql,sql-server,join,Sql,Sql Server,Join,我有两个SQL Server表:ORDR(订单)和RDR1(订单的项目)。我正在尝试创建一个报告,其中显示: DocEntry、CardName、DocDueDate:有关订单的信息 pTot:订单中的项目总数 ItemCode:项目的代码(其中任何一个,只需要一个) DScript:项目的名称 我最后一次尝试是: SELECT dbo.ORDR.DocEntry, dbo.ORDR.CardName, dbo.ORDR.DocDueDate, SUM(dbo.RDR1.Q
ORDR
(订单)和RDR1
(订单的项目)。我正在尝试创建一个报告,其中显示:
- DocEntry、CardName、DocDueDate:有关订单的信息
- pTot:订单中的项目总数
- ItemCode:项目的代码(其中任何一个,只需要一个)
- DScript:项目的名称
SELECT
dbo.ORDR.DocEntry, dbo.ORDR.CardName, dbo.ORDR.DocDueDate,
SUM(dbo.RDR1.Quantity) AS pTot,
dbo.RDR1.ItemCode,
dbo.RDR1.Dscription
FROM
dbo.ORDR
INNER JOIN
dbo.RDR1 ON dbo.ORDR.DocEntry = dbo.RDR1.DocEntry
GROUP BY
dbo.ORDR.DocEntry, dbo.ORDR.CardName, dbo.ORDR.DocDueDate,
dbo.RDR1.ItemCode, dbo.RDR1.Dscription
一个订单中的项目代码/名称非常相似,因此我只需要与该订单关联的第一个RDR1记录
我有两个问题:
pTot
不是对项目数量求和您能告诉我如何正确地联接这些表吗?您可以使用
行数
为每个ORDR
获取第一个RDR1
项目,并使用求和
获取项目总数
SELECT
o.DocEntry,
o.CardName,
o.DocDueDate,
r.pTot,
r.ItemCode,
r.Dscription
FROM dbo.ORDR o
INNER JOIN (
SELECT *,
rn = ROW_NUMBER() OVER(PARTITION BY DocEntry ORDER BY ItemCode),
pTot = SUM(Quantity) OVER(PARTITION BY DocEntry)
FROM dbo.RDR1
) r
ON r.DocEntry = o.DocEntry
WHERE r.rn = 1
此外,您可能希望使用有意义的表别名来提高可读性。以下是我建议的解决方案
SELECT
[rowno] = ROW_NUMBER() OVER(PARTITION BY DocEntry ORDER BY ItemCode),
O.DocEntry,
O.CardName,
O.DocDueDate,
SUM(Quantity) AS pTot,
O.ItemCode,
O.Dscription
INTO #TEMP_ORDER
FROM dbo.ORDR O
INNER JOIN dbo.RDR1 R
ON O.DocEntry = dbo.RDR1.DocEntry
GROUP BY O.DocEntry, O.CardName, O.DocDueDate, R.ItemCode, R.Dscription
SELECT
DocEntry,
CardName,
DocDueDate,
pTot,
ItemCode,
Dscription
FROM #TEMP_ORDER
WHERE roWno = 1
DROP TABLE #TEMP_ORDER