我有一个包含发票的 SQL Server 表和另一个包含发票行的表。我试图在行中获取
Price
金额以添加到我的查询中。我的数据看起来像这样(简化为每个表中有数十列和数千行)
Invoice
表:
InvNumber | ShipCost
----------+---------
1 | 500
2 | 1000
Invoice_line
表:
InvNumber | Product | GL | Price
-----------+---------+----+------
1 | ABC | 2 | 10
1 | Z | 1 | 50
2 | X | 2 | 15
我需要获取一个查询,该查询将根据 GL 帐户获取发票行表上的价格并将其添加到我的查询中,因此在我的示例中,如果 GL 为 1,我需要将该价格添加到我的查询中。
我用
LEFT JOIN
创建了一个查询,但是当我使用它时,它创建了一条价格为 NULL
的行和另一行,所以我错过了一些东西
这是我的疑问:
SELECT DISTINCT
InvNumber,
ShipCost,
CASE
WHEN Invoice_line.GL = '1'
THEN Invoice_line.Price
ELSE NULL
END AS Price
FROM
Invoice
LEFT JOIN
Invoice_line ON Invoice.InvNumber = Invoice_line.InvNumber
这是我现在得到的结果:
InvNumber | ShipCost | Price
----------+----------+-------
1 | 500 | 50
1 | 500 | NULL
2 | 1000 | NULL
预期结果
InvNumber | ShipCost | Price
----------+----------+-------
1 | 500 | 50
2 | 1000 | NULL
我尝试了
SELECT DISTINCT
,但这并没有改变任何东西。
也玩过不同类型的 JOIN,但没有给我带来我所期待的
不确定我缺少什么来获得我正在寻找的结果
选项 1(如果我们可以假设每张发票只有 1 个总帐行)
SELECT
InvNumber,
ShipCost,
Invoice_line.Price AS Price
FROM
Invoice
LEFT JOIN Invoice_line
ON Invoice.InvNumber = Invoice_line.InvNumber
and Invoice_Line.GL = '1'
选项 2(如果发票可以有多行 GL 1,那么我们需要求和)
SELECT
InvNumber,
ShipCost,
sum(Invoice_line.Price) AS Price
FROM
Invoice
LEFT JOIN Invoice_line
ON Invoice.InvNumber = Invoice_line.InvNumber
and Invoice_Line.GL = '1'
GROUP BY InvNumber, ShipCost
选项 3)我们可以进行内联选择,因为我们只在 1 个字段之后。
SELECT
InvNumber,
ShipCost,
(SELECT SUM(coalesce(Invoice_line.Price,0))
FROM Invoice_Line) AS Price
WHERE Invoice.InvNumber = Invoice_line.InvNumber
and Invoice_Line.GL = '1') as Price
FROM Invoice