[FIXED] Wie führe ich mehrere CASE WHEN-Bedingungen mit SQL Server 18 zum Filtern von Ergebnissen durch?

Ausgabe

Ich versuche, die Ergebnisse basierend auf dem Status von zwei Parametern des Benutzers zu filtern. Diese Parameter sind TaxCode und CompanyName. Jetzt erkläre ich Ihnen die Regeln und die Abfrage, die ich zu schreiben versuche.

Regeln:

1- Wenn das Namensfeld leer ist und nur das Steuercodefeld voll ist, sollten nur die Spalten mit diesem Steuercode erscheinen.

2- Wenn das Steuercode-Feld leer ist und nur das Namensfeld ausgefüllt ist, sollten nur Spalten erscheinen, die diesem Namen ähneln.

3- Schließlich, wenn beide gefüllt sind, möchte ich die beiden Ausdrücke mit oder kombinieren und ich möchte, dass sie beide gemeinsam sind.

Wenn TaxCode(IdNoPartNumber) eingegeben wird, verwende ich diese Abfrage, um eine andere Tabelle zu erreichen und ihre ID (Uid) zu erreichen:

select p.Uid FROM PartyIdentificationNumber as pin 
                join Party as p 
                on pin.Uid = p.Uid 
                where p.EI = 'E' and pin.IdNoPartNumber = @TaxCode

Bei der Namenssuche:

LastName LIKE @CompanyName

Ich weiß nicht viel über SQL und der Code, den ich geschrieben habe, wurde länger und verwirrte mich. Danke schon jetzt. Ich hoffe, das war aufschlussreich:

SELECT * 
FROM dbo.Party 
WHERE Uid = CASE WHEN LastName IS NULL 
        THEN ( 
            select p.Uid FROM PartyIdentificationNumber as pin 
            join Party as p 
            on pin.Uid = p.Uid 
            where p.EI = 'E' and pin.IdNoPartNumber = @TaxCode) 

            END

        OR

        LastName LIKE  @CompanyName

Lösung

Ich glaube nicht, dass Sie eine CASE-Anweisung brauchen und denke, Sie könnten möglicherweise so etwas mit IF STATEMENTS machen:

DECLARE @TaxCode varchar(10) = ''
DECLARE @CompanyName varchar(20) = ''

IF (ISNULL(LTRIM(RTRIM(@CompanyName)),'') = '')
    AND (ISNULL(LTRIM(RTRIM(@TaxCode)),'') <> '')
BEGIN
    SELECT p.Uid 
    FROM PartyIdentificationNumber as pin 
        join Party as p on pin.Uid = p.Uid 
    WHERE p.EI = 'E' and pin.IdNoPartNumber = @TaxCode
END
ELSE IF (ISNULL(LTRIM(RTRIM(@TaxCode)),'') = '')
    AND (ISNULL(LTRIM(RTRIM(@CompanyName)),'') <> '')
BEGIN
    SELECT p.Uid 
    FROM PartyIdentificationNumber as pin 
        join Party as p on pin.Uid = p.Uid 
    WHERE LastName LIKE '%' + LTRIM(RTRIM(@CompanyName)) + '%'
END
ELSE IF (ISNULL(LTRIM(RTRIM(@TaxCode)),'') <> '')
    AND (ISNULL(LTRIM(RTRIM(@CompanyName)),'') <> '')
BEGIN
    PRINT 'REPLACE THIS WITH SELECT'
END

Ich vermute nur die SELECTS, die Sie benötigen, basierend auf dem, was Sie geschrieben haben.

Wenn Sie CASE verwenden müssen, lautet das grundlegende Format dafür wie folgt:

SELECT
    CASE 
        WHEN (ISNULL(LTRIM(RTRIM(@CompanyName)),'') = '')
            AND (ISNULL(LTRIM(RTRIM(@TaxCode)),'') <> '') THEN 'DO THIS 1'
        WHEN (ISNULL(LTRIM(RTRIM(@TaxCode)),'') = '')
            AND (ISNULL(LTRIM(RTRIM(@CompanyName)),'') <> '') THEN 'DO THIS 2'
        WHEN (ISNULL(LTRIM(RTRIM(@TaxCode)),'') <> '')
            AND (ISNULL(LTRIM(RTRIM(@CompanyName)),'') <> '') THEN 'DO THIS 3'
        ELSE 
            'DO THIS 4'
    END
FROM [TABLE_NAME]


Beantwortet von –
Drache


Antwort geprüft von –
Katrina (FixError Volunteer)

0 Shares:
Leave a Reply

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

You May Also Like