[FIXED] Wie kann ich mehrere Spalten gleichzeitig steuern?

Ausgabe

Ich habe folgende Tabelle und möchte die Auswahl mit der DATE_FORMVariable steuern.

Warum funktioniert mein T-SQL-Code nicht? Hat jemand eine Idee?

Tabelle 1

-- @DATE_FORM = 1 select a particular INFO-DATE INTERVALL
-- @DATE_FORM = 2 select a particular ORDER-DATE INTERVALL
-- @DATE_FORM = 3 select a particular SHIPPING INTERVALL

DECLARE @DATE_FORM int = 3,
        @FROM smalldatetime  = '2022-10-05 00:00:00',
        @UNTIL smalldatetime = '2022-10-06 00:00:00';

SELECT *
FROM [AdventureWorksDW2019].[dbo].[Table_2]
WHERE 1 = 1
  AND (CASE WHEN @DATE_FORM = 1 THEN INFO_DATE 
            WHEN @DATE_FORM = 2 THEN ORDER_DATE END) BETWEEN @FROM AND @UNTIL
  AND ((CASE WHEN @DATE_FORM = 3 THEN SHIPPING_DATE_START END) BETWEEN @FROM AND @UNTIL
        AND (CASE WHEN @DATE_FORM = 3 THEN SHIPPING_DATE_END END) BETWEEN @FROM AND @UNTIL)

Lösung

Es funktioniert nicht, weil Ihre Fälle es nicht zulassen, dass Ihre Bedingungen jemals erfüllt werden. Nehmen wir zum Beispiel an @Date_Form = 3, was passiert mit dieser Bedingung?:

(CASE WHEN @DATE_FORM = 1 THEN INFO_DATE 
      WHEN @DATE_FORM = 2 THEN ORDER_DATE 
   END) between @FROM and @UNTIL

Da @DATE_FORM = 3in nicht behandelt Casewird, würde dies im Wesentlichen zu Folgendem führen:

null between @From AND @UNTIL

was zu false führen wird. Ich würde (der Einfachheit halber) die Fälle vollständig entfernen:

SELECT *
FROM [AdventureWorksDW2019].[dbo].[Table_2]
WHERE (@DATE_FORM = 1 
      AND INFO_DATE BETWEEN @FROM AND @UNTIL)
OR    (@DATE_FORM = 2 
      AND ORDER_DATE BETWEEN @FROM AND @UNTIL)
OR    (@DATE_FORM = 3 
       AND SHIPPING_DATE_START BETWEEN @FROM AND @UNTIL 
       AND SHIPPING_DATE_END BETWEEN @FROM AND @UNTIL)


Beantwortet von –
Soerman


Antwort geprüft von –
Terry (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like