私は実際にMS SQL Serverの結果にいくつかの重複を作成する方法を探しています。私は通常、重複を作成しない方法を探していることを理解していますが、この例ではすべての個々の行が返される必要があります。複数の結果を含むケース式
私は約1,000万行と33列のテーブルを扱っています。テーブルは最初のカラムのIDで構成され、残りのカラムには 'Y'または 'NULL'があります。大部分のカラムがNULLです。
1000万行のうち、800万行には1つの「Y」行しか残っておらず、残りの200万行には複数の列があり、「Y」が並んでいます。
単一の「Y」の行の場合、基本的なケース式は、結果の単一の列を作成するために完全に正常に機能します。
これは私の問題です。2つの行、1つの行に複数の「Y」がある場合は、それぞれの「Y」に1つ必要です。
以下は、小さな識別されていないサンプルです。
ID FLAG1 FLAG2 FLAG3 FLAG4 FLAG5
188 NULL NULL NULL NULL NULL
194 Y NULL NULL NULL NULL
200 Y NULL NULL NULL Y
このようなケースエクスプレッションを使用しようとしています。
Select
ID
,Case
When [FLAG1] = 'Y'
Then 'FLAG1'
When [FLAG2] = 'Y'
Then 'FLAG2'
End as 'Service_Line'
私が欲しいのは、このような結果です。
ID Service_Line
194 FLAG1
200 FLAG1
200 FLAG5
私の問題は、Caseの式が最初の結果を返すだけなので、私はこれで終わります。
ID Service_Line
194 FLAG1
200 FLAG1
私が達成しようとしているものに適したケースエクスプレッションか、これについて別の方法で取り組もうとしていますか?
どのDBシステム(MySQL、PostgreSQL、Oracle、MS SQL Serverなど)を使用していますか?このような問題をエレガントな方法で解決するために利用できる機能には、これが異なる場合があります。 – IMSoP
質問を編集し、使用しているデータベースを指定してください。 –
RDBMSがUNPIVOTをサポートしているかどうか確認してください。 –