Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL: Selecting same Table Column twice based on different WHERE conditions

Tags:

sql

sql-server

I have already tried various proposed solutions here but none of them have proposed what I need.

I need one result of 2 Queries with each one WHERE condition of 1 Table. No Union result please. Both query results need to be in different Columns packed in one result. Let me show you what I mean:

Query 1:

This is the result from the first query

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

Query 2:

This is the result from the second query

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

All I need is a result like the following:

Needed result:

Needed result

PS: The best would be, if all null results would be shown as '0'

like image 437
Karol Avatar asked Jul 02 '26 22:07

Karol


1 Answers

You've basically got two queries that you then join together on tbl_Abteilungen.Bezeichnung

So like this:

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

i.e. your two queries as sub-queries, with a FULL OUTER JOIN. Note that in the second query I've added tbl_Abteilungen.Bezeichnung AS Abteilung as a SELECT column to make the join possible.

like image 55
codeulike Avatar answered Jul 05 '26 12:07

codeulike



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!