【发布时间】:2020-09-10 07:53:26
【问题描述】:
我有一个查询对我的输出产生了奇怪的行为。
我的表格如下所示:
表 Leistungen 列 Abrechnungsnummer(varchar)、KST_Leistung(varchar)、ZZ_Euro(money)、GG_Euro(money)、Rezept_ID(varchar)、Rechnungsart(varchar)
表 Leistungen_pos 列 Rezept_ID(varchar)、US(varchar)、
这些表使用“Rezept_ID”进行连接。输出必须按 Abrechnungsnummer 和 KST_Leistung 分组。每个 SUM 都依赖于 US-Field(1 和 21 一起,2 和 22 等等..)。 问题是,第二次加入改变了我第一次加入的第一个 SUM 的输出。
SELECT dbo.Leistungen.Abrechnungsnummer,
CASE WHEN (dbo.Leistungen.KST_Leistung = '') THEN 'ohne' ELSE dbo.Leistungen.KST_Leistung END AS Kostenstellen,
CASE WHEN (SUM(lposK_US1.GG_Euro) IS NULL) THEN 0 ELSE SUM(lposK_US1.GG_Euro) END AS SummeGesamtKasse19,
CASE WHEN (SUM(lposK_US2.GG_Euro) IS NULL) THEN 0 ELSE SUM(lposK_US2.GG_Euro) END AS SummeGesamtKasse7,
CASE WHEN (SUM(lposK_US3.GG_Euro) IS NULL) THEN 0 ELSE SUM(lposK_US3.GG_Euro) END AS SummeGesamtKasse16,
CASE WHEN (SUM(lposK_US4.GG_Euro) IS NULL) THEN 0 ELSE SUM(lposK_US4.GG_Euro) END AS SummeGesamtKasse5
FROM dbo.Leistungen
LEFT OUTER JOIN dbo.Leistungen_Pos AS lposK_US1 ON lposK_US1.Rezept_ID = dbo.Leistungen.Rezept_ID AND dbo.Leistungen.Rechnungsart = 'K' AND lposK_US1.US IN ('1', '21')
LEFT OUTER JOIN dbo.Leistungen_Pos AS lposK_US2 ON lposK_US2.Rezept_ID = dbo.Leistungen.Rezept_ID AND dbo.Leistungen.Rechnungsart = 'K' AND lposK_US2.US IN ('2', '22')
LEFT OUTER JOIN dbo.Leistungen_Pos AS lposK_US3 ON lposK_US3.Rezept_ID = dbo.Leistungen.Rezept_ID AND dbo.Leistungen.Rechnungsart = 'K' AND lposK_US3.US IN ('3', '23')
LEFT OUTER JOIN dbo.Leistungen_Pos AS lposK_US4 ON lposK_US4.Rezept_ID = dbo.Leistungen.Rezept_ID AND dbo.Leistungen.Rechnungsart = 'K' AND lposK_US4.US IN ('4', '24')
WHERE Abrechnungsnummer = '5432200101'
GROUP BY dbo.Leistungen.Abrechnungsnummer, dbo.Leistungen.KST_Leistung
我的问题是,我的查询的第一行有一个值,即 29181,52.. 这个值是错误的!
如果我用 2 和 22 停用第二个 JOIN,我得到了正确的值 (29131,12)。 如果我在没有任何连接的情况下对正确的字段进行简单选择,这就是我得到的值。
当我使用第二个连接并将其视为独立结果时,我无法解释为什么此 SQL 会在我的第一行添加一个小值。 一定是语法错误,因为我查过数据,是合理的。
希望有人能帮我解决这个问题。
这里有一些示例
只要我为 US=2 添加更多值,它就会添加值 20。 如果我限制 2 和 22 的加入,怎么会发生这种情况?
结果如下所示:
你可以看到
它将值 7 放在同一行中。相反,它必须在他自己的行中,第二个 20 值必须为 NULL。
【问题讨论】:
-
轻松为您提供帮助 - 简化问题! (minimal reproducible example.)
-
猜测你有一个多对一的关系,所以当你
JOIN你SUM相同的值 2 次或更多次。 -
如果没有重现问题的示例数据,将很难为您提供帮助。
-
lposK_US2.Rezept_ID字段是否有重复值? -
请不要将数据发布为图像,使用格式化文本。
标签: sql sql-server syntax left-join