En bref: j'essaie d'utiliser un délimiteur conditionnel dans ma fonction STUFF(). À des fins de mes données, les valeurs dans l'exemple ci-dessous sont dans une série basée sur les deux premiers chiffres.SQL - CASE WHEN dans la fonction STUFF pour le délimiteur conditionnel
| uniqueID | value |
| name1 | 110 |
| name1 | 111 |
| name1 | 112 |
| name1 | 113 |
| name1 | 120 |
| name1 | 121 |
| name1 | 130 |
| name1 | 131 |
Une fonction STUFF() ressemble à ceci:
select t.uniqueid, stuff((select distinct ',' + v.value
from #temp v
where v.uniqueID = t.uniqueid
for XML path ('')),1,1,'')
from #temp t
... qui retourne:
| uniqueID | value |
| name1 | 110, 111, 112, 113, 120, 121, 130, 131 |
Encore une fois, étant donné que nous classons en interne les codes ci-dessus en fonction de la première deux chiffres, je voudrais une virgule entre les valeurs dans la même série, et un délimiteur unique (par exemple un @) entre la dernière valeur d'une série et le premier v alue dans la série suivante.
sortie Idéal:
| uniqueID | value |
| name1 | 110, 111, 112, [email protected], [email protected], 131 |
Ma première pensée pour exécuter le STUFF() comme il est, puis effectuer une recherche dans la chaîne résultante, mais pas sûr que ce soit intelligent ou même comment faire. Ma deuxième pensée était peut-être une instruction CASE WHEN au lieu de la déclaration delimiter ',' dans STUFF(), mais encore une fois je ne sais pas comment comparer une valeur à la suivante dans le STUFF (). Ma dernière pensée était peut-être de faire une comparaison avant le STUFF() des valeurs et où la "série" se termine, il suffit d'ajouter '+ @', qui serait tiré pendant le STUFF().
Toute aide ou démarche créative serait appréciée. Merci d'avance.
En ce qui concerne uniquement le terrain tweaks cela a fonctionné à merveille. Je vous remercie! –
Pas de problème, content que cela ait marché pour vous - je suis sûr qu'il y a une manière plus élégante cependant! – 3N1GM4