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)