問題文:
共通の特徴を持つ 2 つのテーブルがあります: 行番号。目標は、その属性に対して内部結合を実行し、特定のデータを取得することです。
特定のシナリオ:
次のデータを含む 2 つのテーブル A と B について考えます。
テーブルA
RowA |
---|
RowB |
RowC |
RowD |
テーブル B
Row4 |
---|
Row3 |
Row2 |
Row1 |
必要な出力:
解決策:
行番号で目的の内部結合を実現するには、 SQL Server 2008 では ROW_NUMBER() 関数を次のように利用できます。
SELECT A.val, B.val FROM ( SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num FROM A ) AS A JOIN ( SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num FROM B ) AS B ON A.row_num = B.row_num ORDER BY A.val, B.val
説明:
代替シナリオ:
に行を表示する必要がある場合ORDER BY 句のない個々のテーブルでの順序と同じ順序にするには、クエリを次のように変更します。
SELECT A.val, B.val FROM ( SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num FROM A ) AS A JOIN ( SELECT val, ROW_NUMBER() OVER (ORDER BY val) AS row_num FROM B ) AS B ON A.row_num = B.row_num
このリビジョンでは、追加の ORDER BY 句が削除され、元の行シーケンスが保持されます。
以上がSQL Server 2008 で行番号に基づいて 2 つのテーブルを結合するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。