sql - concaténation de cas déclarations
Je veux faire quelque chose de similaire à:
SELECT
('['+twt.dept+']' +
CASE WHEN twt.typ <> 'EMPTY' AND twt.typ > '' THEN '-['+twt.typ+']' END
+ CASE WHEN twt.subtyp_1 <> 'EMPTY' AND twt.subtyp_1 > '' THEN '-['+twt.subtyp_1+']' END
+ CASE WHEN twt.subtyp_2 <> 'EMPTY' AND twt.subtyp_2 > '' THEN '-['+twt.subtyp_2+']' END
+ CASE WHEN twt.subtyp_3 <> 'EMPTY' AND twt.subtyp_3 > '' THEN '-['+twt.subtyp_3+']' END) AS category
FROM table1 AS tb1
JOIN table2 AS twt ON (tb1.id = twt.id)
Je sais que je peux utiliser fusionner ou à l'aide de l'empilement des cas, mais y a de toute façon de l'utiliser plus simple à la recherche de la syntaxe, comme je l'ai ici pour le faire (surtout sans avoir un monstre de cas pour la 5ème cas)?
PS de la catégorie est de retour à vide, alors que j'ai vérifié qu'au moins deux de le champ ci-dessus ne contiennent des valeurs.
Je suis l'espoir d'obtenir quelque chose comme [chaussures]-[sandales]-[crêpes]-[brioche à la cannelle]
- Ce SGBDR et de version? Aussi vous n'avez pas de
ELSE
dans votreCASE
des expressions qui signifie qu'ils peuvent retournerNULL
. Et la concaténation deNULL
rendementsNULL
. Est-ce l'intention?
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que vous pouvez faire à votre requête le plus court. Vous utilisez des champs distincts. Techniquement, vous pouvez utiliser certaines fonctions qui ne le
CASE WHEN
travail, mais je ne pense pas que le gain est suffisant.Noter que si un
CASE
échoue et il n'a pas unELSE
il retourneNULL
, et en SQL'Hello' + NULL = NULL
Test Simple:
Test Correct: