J'ai une requête compliquée dont les résultats ont été stockés dans une table temporaire pour l'instant par souci de simplicité. J'ai une liste délimitée par des virgules = de certaines combinaisons de trois caractères identificateurs uniques tels que le capuchon d'écran ci-dessous:Trouver une combinaison unique d'identifiants dans une liste délimitée par des virgules
Vous pouvez voir dans les lignes 2 et 3 que les 3 identificateurs de caractères sont les mêmes, mais dans l'ordre inverse. Les chiffres sont différents, mais ces valeurs sont correctes (le nombre de personnes avec X et Y est différent du nombre de personnes avec Y et X si les tailles de population de X et Y ne sont pas égales). Je voudrais trouver les combinaisons uniques de tous les médicaments, indépendamment de l'ordre dans lequel ils apparaissent. J'imagine quelque chose comme un row_number()
avec une partition qui nous donne 1 et 2 pour les lignes 2 et 3.
Je ne l'ai jamais essayé quelque chose comme ça dans SQL, mais ma pensée était quelque chose le long des lignes de
select *,
case when LEN(alldrugs)-LEN(replace(alldrugs,',',''))= 1 then 2
when LEN(alldrugs)-LEN(REPLACE(alldrugs,',',''))= 2 then 3
when LEN(alldrugs)-LEN(REPLACE(alldrugs,',',''))= 3 then 4
when LEN(alldrugs)-LEN(REPLACE(alldrugs,',',''))= 4 then 5
when LEN(alldrugs)-LEN(REPLACE(alldrugs,',',''))= 5 then 6
else 1 end as numDrugs
from #testfix as tf
order by alldrugs,numDrugs
Étant donné que la liste est délimitée par des virgules, l'instruction case when
trouve le nombre de virgules dans une ligne et indique le nombre de segments à trois chiffres à rechercher. Pour les colonnes alldrugs avec 2 médicaments (une virgule), je pourrais faire les résultats d'un CTE, auto-rejoindre sur ce CTE et vérifier si right(alldrugs,3) = left(alldrugs,3)
. Ceci n'est évidemment pas extensible. Existe-t-il un moyen idiomatique d'obtenir des combinaisons uniques comme celle-ci?
Exemple de violon: http://www.sqlfiddle.com/#!3/18468/1 – mellamokb
@mellamokb merci pour cela.J'en inclurai un à partir de maintenant. – wootscootinboogie
Combien de codes de médicaments distincts avez-vous? – MatBailie