これは非常に標準的な初心者の質問ですが、私は小さなコードでこれを行うための専門家の賢い方法を探しています。(手続き型コードとカーソルを使用して、この長い手を行う方法を知っているので、答えのその部分をスキップできます。)基本的に、非正規化データセットがあり、セット処理で正規化テーブルを抽出する必要があります。方法。生データはExcelから取得され、MSSQLからクエリを実行するためのテーブルとして添付します。単一のフィールド(Excel、したがってSQL)には、各製品が参加する部門のコンマ区切りのリストがあります。
データを正規化する必要があることはわかっていますが、Excelから取得されています(ユーザーが正規化するのは現実的ではありません)。各レコードをループする手順(カーソルやステートメントなど)を使用してこれを実行できることはわかっていますが、現在利用可能なツールでは不要のようです。 これらのレコードの「参加者」フィールドを持つ主キーを抽出できる単一のステートメントはありますか?
ソースを次のように考えてください。
ProductIDDepartments
123 1,3,5,15
456 2,4,5,16
通常のselect*from dbo.split(CommaSepField)を実行しましたが、これは一度に1つのレコードでのみ機能します(テーブル値関数でフィールドの値を指定することはできません。言うまでもなく、これらすべての単一の結果をどのように結合しますかセット?
すべての結果セットを統合することで、共通テーブル式について考えるようになりましたが、(1)展開されたフィールドで主キーを取得する方法、および(2)クエリを機能するようにフォーマットする方法を完全に理解することはできません。
もちろん、出力は次のようになります。
ProductIDDept
123 1
123 3
123 5
123 15
456 2
456 4
456 5
456 16
StackOverflowとGoogleでこれをかなり調べましたが、当てはまる答えは実際には見つかりませんでした。見逃してしまったことをお詫び申し上げます。リンクを送ってください:D。