none
Wie kann man ein festes SELECT-Statement an mehreren Stellen einer weiteren SELECT Abfrage in MS-SQL-Server2017 verwenden? RRS feed

  • Frage

  • Hallo,

    ich habe das folgende SQL-Statement:

    SELECT [ProduktA1] AS Nummer, [Ort], 1 AS Nummern 
    FROM HitTable$
    UNION ALL 
    SELECT [ProduktA2] AS Nummer, [Ort], 2 AS Nummern 
    FROM HitTable$
    UNION ALL 
    SELECT [ProduktA3] AS Nummer, [Ort], 3 AS Nummern 
    FROM HitTable$

    Dieses möchte in an mehreren Stellen einer nachfolgenden SELECT-Anweisung in verschiedenen LEFT JOIN Blöcken verwenden.

    Mit dyn. SQL bin ich nicht weitergekommen.

    Weiß hier vielleicht jemand Rat?

    Gruß Jürgen

    Dienstag, 18. September 2018 05:06

Antworten

  • Hallo zusammen,

    ich habe eine Lösung gefunden:

    WITH subUnion AS
    (
    	SELECT [ProduktA1] AS Produkt, [Ort], 1 AS Produkte 
    	FROM HitTable$
    	WHERE [IsWerbung1] = '0' AND [Ort] <> N'' AND [ProduktA1] <> N''
    	UNION ALL 
    	SELECT [ProduktA2] AS Produkt, [Ort], 2 AS Produkte 
    	FROM HitTable$
    	WHERE [IsWerbung2] = '0' AND [Ort] <> N'' AND [ProduktA2] <> N''
    	UNION ALL 
    	SELECT [ProduktA3] AS Produkt, [Ort], 3 AS Produkte 
    	FROM HitTable$
    	WHERE [IsWerbung3] = '0' AND [Ort] <> N'' AND [ProduktA3] <> N''
    )
    
    SELECT *
    FROM
    (
       SELECT Produkt, [Ort]
       FROM
       ( 
          SELECT Produkt, [Ort], Produkte FROM subUnion
       ) as x
    ) as p

    Danke an die, die sich bereits Gedanken gemacht haben.

    Gruß Jürgen

    • Als Antwort markiert Jürgen Sch Dienstag, 18. September 2018 07:02
    Dienstag, 18. September 2018 07:02

Alle Antworten

  • Hallo Jürgen,

    ich weiß nicht, ob ich Dich richtige verstanden habe, aber um eine Teilabfrage mehrfach zu verwenden, bieten sich CTE = Common Table Expression an, z.B.

    ;WITH cte AS
       (SELECT [ProduktA1] AS Nummer, [Ort], 1 AS Nummern 
        FROM HitTable$
        UNION ALL 
        SELECT [ProduktA2] AS Nummer, [Ort], 2 AS Nummern 
        FROM HitTable$
        UNION ALL 
        SELECT [ProduktA3] AS Nummer, [Ort], 3 AS Nummern 
        FROM HitTable$)
    
    SELECT *
    FROM cte as c1
         LEFT JOIN
         cte as c2
             ON c1...


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 18. September 2018 05:33
  • Hallo zusammen,

    ich habe eine Lösung gefunden:

    WITH subUnion AS
    (
    	SELECT [ProduktA1] AS Produkt, [Ort], 1 AS Produkte 
    	FROM HitTable$
    	WHERE [IsWerbung1] = '0' AND [Ort] <> N'' AND [ProduktA1] <> N''
    	UNION ALL 
    	SELECT [ProduktA2] AS Produkt, [Ort], 2 AS Produkte 
    	FROM HitTable$
    	WHERE [IsWerbung2] = '0' AND [Ort] <> N'' AND [ProduktA2] <> N''
    	UNION ALL 
    	SELECT [ProduktA3] AS Produkt, [Ort], 3 AS Produkte 
    	FROM HitTable$
    	WHERE [IsWerbung3] = '0' AND [Ort] <> N'' AND [ProduktA3] <> N''
    )
    
    SELECT *
    FROM
    (
       SELECT Produkt, [Ort]
       FROM
       ( 
          SELECT Produkt, [Ort], Produkte FROM subUnion
       ) as x
    ) as p

    Danke an die, die sich bereits Gedanken gemacht haben.

    Gruß Jürgen

    • Als Antwort markiert Jürgen Sch Dienstag, 18. September 2018 07:02
    Dienstag, 18. September 2018 07:02
  • Hallo Olaf,

    danke für deine Antwort. 

    Ich hatte es zwischenzeitlich mit der WITH - Clausel versucht und es hat geklappt.

    Deine Lösung mit dem cte ist ja ähnlich.

    Gruß Jürgen

    Dienstag, 18. September 2018 10:06