0

2 つの select ステートメントがあるとします (これは単なる例です。データはテキストでもかまいません)。

 S1        S2
| 1 |    | a |
| 2 |    | b |  
| 3 |    | c |
| 4 |    | d |
| 5 |    | e |

どうすればそれらを 1 つのステートメントに「接着」できますが、それぞれ次のように 1 つの列があります。

 S1         S2          S3
| 1 |     | a |     | 1   a |
| 2 |     | b |     | 2   b |  
| 3 |  +  | c |  =  | 3   c |  
| 4 |     | d |     | 4   d |
| 5 |     | e |     | 5   e |

それが可能である場合、次のような null または空のステートメントに耐性がありますか?:

 S1         S2           S3
| 1 |     |NULL|     | 1  NULL|
| 2 |                | 2  NULL|
| 3 |  +          =  | 3  NULL|
| 4 |                | 4  NULL|
| 5 |                | 5  NULL|

2 つのステートメントにはキーがありませんが、行ごとに互いに属しています (いずれかが null でない限り)。

これは、while ループ、カーソル、および一時テーブルを使用して実行できることを知っています。問題は、これを高速にする必要があり、多くのリソースを使用しないことです。これは、このステートメントが頻繁に実行されるためです。たぶん、これを達成するための巧妙なトリックを知っている人や、それを解決する方法を提案している人もいますか?

これは何に使用されますか?: このソリューションの目的は、トリガー テーブルの UPDATED および INSERTED を取得し、各行を XML 部分に変換し、それらを XML 値または null を持つ一時テーブルに配置する必要があるログ システムです (その特定のテーブルで変更されたアクション)。

どんな助けでも大歓迎です。

4

2 に答える 2

0

質問を理解していただければ幸いですが、2つの列を1つに結合したい場合は、単に使用できます

SELECT CONCAT(ColumnA, ColumnB) AS ColumnZ
FROM Table

ただし、SQL 2005 が CONCAT メソッドをサポートしているかどうかはわかりませんが、そうでない場合は (式 + 式) などの構文を使用する必要があります。

于 2012-10-05T08:21:12.483 に答える
0

あなたの他のコメントに基づいて、おそらくこのようなものが役立つかもしれません.

Select Row_Number() Over(Order By S1.Value) as LeftRow, S1.Value as LeftValue Into #TempTable
Select LeftRow, LeftValue, RightRow, RightValue From #TempTable
Inner Join (Select Row_Number() Over(Order By S2.Value) as RightRow, S2.Value as RightValue) rightTable
On LeftRow = RightRow
Drop Table #TempTable

多分 ?

于 2012-10-05T17:12:55.053 に答える