簡単にするために、当面の間、結果を一時テーブルに保存した複雑なクエリがあります。以下のスクリーンキャップなど、3文字の一意の識別子の特定の組み合わせのコンマ=区切りリストがあります。
2行目と3行目で、3文字の識別子は同じですが順序が逆になっていることがわかります。カウントは異なりますが、それらの値は正しいです(XとYの人口サイズが等しくない場合、XとYの人の数はYとXの人の数とは異なります)。出現する順番に関係なく、すべての薬のユニークな組み合わせを見つけたいと思います。row_number()
行2と3に1と2を与えるパーティションを持つaの ようなものを想像します。
私はSQLでこのようなことを試みたことがありませんが、私の考えは
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
リストはコンマで区切られているため、case when
ステートメントは行内のコンマの数を検索し、検索する3桁のスパンの数を示します。2つの薬剤(1つのコンマ)を含むalldrugs列の場合、結果をCTEにし、そのCTEに自己結合して、かどうかを確認できright(alldrugs,3) = left(alldrugs,3)
ます。これは明らかに拡張可能ではありません。このようなユニークな組み合わせを得る慣用的な方法はありますか?