我已经在这里尝试了各种建议的解决方案,但是没有一个提出我需要的解决方案。
我需要2个查询的一个结果,每个1个表的WHERE条件。请没有联盟结果。两个查询结果都必须放在一个结果中的不同列中。让我告诉你我的意思:
查询1:
SELECT
tbl_Abteilungen.Bezeichnung AS Abteilung,
COUNT(tbl_Abteilungen.abteilungen_id) AS [Offene Abteilungstermine]
FROM
tbl_Lieferschein
INNER JOIN
tbl_Positionen ON tbl_Lieferschein.lieferschein_id = tbl_Positionen.id_lieferschein
INNER JOIN
tbl_Positionen_Abteilungen ON tbl_Positionen.positionen_id = tbl_Positionen_Abteilungen.id_positionen
INNER JOIN
tbl_Abteilungen ON tbl_Positionen_Abteilungen.id_abteilungen = tbl_Abteilungen.abteilungen_id
WHERE
tbl_Positionen_Abteilungen.fertiggestellt = 0
AND tbl_Lieferschein.fertiggestellt = 0
AND tbl_Lieferschein.gelöscht = 0
GROUP BY
tbl_Abteilungen.Bezeichnung
查询2:
SELECT
COUNT(tbl_Abteilungen.abteilungen_id) AS [Überfällige Abteilungstermine]
FROM
tbl_Lieferschein
INNER JOIN
tbl_Positionen ON tbl_Lieferschein.lieferschein_id = tbl_Positionen.id_lieferschein
INNER JOIN
tbl_Positionen_Abteilungen ON tbl_Positionen.positionen_id = tbl_Positionen_Abteilungen.id_positionen
INNER JOIN
tbl_Abteilungen ON tbl_Positionen_Abteilungen.id_abteilungen = tbl_Abteilungen.abteilungen_id
WHERE
tbl_Positionen_Abteilungen.fertiggestellt = 0
AND tbl_Lieferschein.fertiggestellt = 0
AND tbl_Lieferschein.gelöscht = 0
AND tbl_Positionen_Abteilungen.Abteilungstermin < CAST(GETDATE() AS DATE)
GROUP BY
tbl_Abteilungen.Bezeichnung
我需要的是如下结果:
所需结果:
PS:最好的情况是,如果所有空结果都显示为“ 0”
最佳答案
您基本上有两个查询,然后在tbl_Abteilungen.Bezeichnung
上将它们合并在一起
像这样:
SELECT ISNULL(A.Abteilung, B.Abteilung) AS Abteilung, ISNULL(A.[Offene Abteilungstermine],0) AS [Offene Abteilungstermine],
ISNULL(B.[Überfällige Abteilungstermine],0) AS [Überfällige Abteilungstermine]
FROM (SELECT tbl_Abteilungen.Bezeichnung AS Abteilung,
COUNT(tbl_Abteilungen.abteilungen_id) AS [Offene Abteilungstermine]
FROM tbl_Lieferschein
INNER JOIN tbl_Positionen ON tbl_Lieferschein.lieferschein_id = tbl_Positionen.id_lieferschein
INNER JOIN tbl_Positionen_Abteilungen ON tbl_Positionen.positionen_id = tbl_Positionen_Abteilungen.id_positionen
INNER JOIN tbl_Abteilungen ON tbl_Positionen_Abteilungen.id_abteilungen = tbl_Abteilungen.abteilungen_id
WHERE tbl_Positionen_Abteilungen.fertiggestellt = 0
AND tbl_Lieferschein.fertiggestellt = 0
AND tbl_Lieferschein.gelöscht = 0
GROUP BY tbl_Abteilungen.Bezeichnung) A
FULL OUTER JOIN
(SELECT tbl_Abteilungen.Bezeichnung AS Abteilung, COUNT(tbl_Abteilungen.abteilungen_id) AS [Überfällige Abteilungstermine]
FROM tbl_Lieferschein
INNER JOIN tbl_Positionen ON tbl_Lieferschein.lieferschein_id = tbl_Positionen.id_lieferschein
INNER JOIN tbl_Positionen_Abteilungen ON tbl_Positionen.positionen_id = tbl_Positionen_Abteilungen.id_positionen
INNER JOIN tbl_Abteilungen ON tbl_Positionen_Abteilungen.id_abteilungen = tbl_Abteilungen.abteilungen_id
WHERE tbl_Positionen_Abteilungen.fertiggestellt = 0
AND tbl_Lieferschein.fertiggestellt = 0
AND tbl_Lieferschein.gelöscht = 0 AND tbl_Positionen_Abteilungen.Abteilungstermin < cast(GETDATE() AS DATE)
GROUP BY tbl_Abteilungen.Bezeichnung) B
ON A.Abteilung = B.Abteilung
即您的两个查询作为子查询,并具有FULL OUTER JOIN。请注意,在第二个查询中,我添加了
tbl_Abteilungen.Bezeichnung AS Abteilung
作为SELECT列,以使联接成为可能。