SELECT
Siren,
CASE WHEN Code_Juridique LIKE 'M%' AND Enseigne IS NOT NULL AND Enseigne <> '' --ok
THEN 'Enseigne : ' + Enseigne
WHEN (Sigle IS NULL OR Sigle ='')
AND (Enseigne IS NULL OR Enseigne ='')
THEN '' -- ok
WHEN
(Sigle IS NOT NULL OR Sigle <> '' ) THEN 'Sigle : ' + Sigle
ELSE 'Sigle / Enseigne : ' + Sigle + ' / ' + Enseigne
END as SigleEnseigne1,
Sigle,
Enseigne,
Code_Juridique
FROM #JohnJack
Der Code ist unkompliziert.
Das Problem liegt beim dritten when
, wie Sie unten sehen können
Ich hätte nichts in meiner 4. und 5. Zeile haben sollen, aber es gibt mir Sigle :
Ich möchte, dass die Spalte SigleEnseigne1
in der 4. und 5. Zeile leer ist
Vielen Dank für Ihre Erkenntnisse
4 Antworten
Versuche dies:
SELECT
Siren,
CASE WHEN ( Code_Juridique LIKE 'M%' ) AND ( IsNull( Enseigne, '' ) <> '' )
THEN 'Enseigne : ' + Enseigne
WHEN ( IsNull( RTrim(LTrim(Sigle)), '') = '') AND ( IsNull( Enseigne, '' ) = '')
THEN '' -- ok
WHEN ( IsNull( RTrim(LTrim(Sigle)), '' ) <> '' )
THEN 'Sigle : ' + RTrim(LTrim(Sigle))
ELSE
'Sigle / Enseigne : ' + IsNull( RTrim(LTrim(Sigle)), '' ) + ' / ' + Enseigne
END as SigleEnseigne1,
Sigle,
Enseigne,
Code_Juridique
FROM #JohnJack
Neben der Angabe des Offensichtlichen, dass ein (TRUE OR FALSE) = TRUE
Ich würde den Code mit ISNULL()
und LEN()
vereinfachen und kugelsicher machen.
SELECT
Siren,
CASE WHEN Code_Juridique LIKE 'M%' AND LEN(ISNULL(Enseigne,'')) > 0 --ok
THEN 'Enseigne : ' + Enseigne
WHEN (LEN(ISNULL(Sigle, '')) = 0)
AND (LEN(ISNULL(Enseigne, '')) = 0)
THEN '' -- ok
WHEN
LEN(ISNULL(Sigle, '')) > 0 THEN 'Sigle : ' + Sigle
ELSE 'Sigle / Enseigne : ' + ISNULL(Sigle, '') + ' / ' + ISNULL(Enseigne, '')
END as SigleEnseigne1,
Sigle,
Enseigne,
Code_Juridique
FROM #JohnJack
Wie würde Ihr Code reagieren, wenn diese Felder Leerzeichen enthalten? LEN
schneidet nachfolgende Leerzeichen automatisch ab.
Diese Zeile verursacht Ihr Problem:
(Sigle IS NOT NULL OR Sigle <> '' ) THEN 'Sigle : ' + Sigle
... aber das ist nur offensichtlich, weil Sie angeben, dass Sie dieses Ergebnis nicht wollen. Ansonsten verhält sich der Code wie erwartet.
Die einfachste Lösung wäre herauszunehmen:
'Sigle : ' + Sigle
Aber das kann genau das sein, wonach Sie suchen. Basierend auf den gegebenen Informationen ist es die Lösung, aber es gibt nicht viele Informationen, die bearbeitet werden müssen
Wenn Sie versuchen, Werte ungleich Null zum Drucken zu bringen, sollte dies eher ein UND als ein ODER sein. Wenn Sie ein ODER verwenden, wird true zurückgegeben, wenn JEDE Bedingung erfüllt ist.
Ich bin nicht sicher, warum Sie diese when
haben
WHEN (Sigle IS NULL OR Sigle = '')
AND (Enseigne IS NULL OR Enseigne ='')
THEN '' -- ok
Was Sie wollen, ist, dass SigleEnseigne1 NULL
und ''
ist, wenn Single NULL
oder ''
ist. Benötigen Sie dieses when
nicht stattdessen?
WHEN (Sigle IS NULL OR Sigle = '') THEN ''
Es kann auch das Problem geben, dass Single nicht die leere Zeichenfolge ist und Leerzeichen enthält. Sie können die Funktionen LTRIM()
und RTRIM()
verwenden
Neue Fragen
sql
Structured Query Language (SQL) ist eine Sprache zum Abfragen von Datenbanken. Zu den Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) gehören. Wenn sich Ihre Frage ausschließlich auf ein bestimmtes DBMS bezieht (bestimmte Erweiterungen / Funktionen verwendet), verwenden Sie stattdessen das Tag dieses DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten ISO / IEC-Standard-SQL verwenden.