假设我有两个select语句(这只是一个例子。数据也可以是文本):
S1 S2
| 1 | | a |
| 2 | | b |
| 3 | | c |
| 4 | | d |
| 5 | | e |
我怎样才能将它们“粘合”成一个声明,但每个声明都有一个列:
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|
这两个语句没有键,但确实彼此相同(除非其中一个为null)。
我知道这可以使用while循环,游标和临时表来完成。问题是我需要快速并且不要使用那么多资源,因为这个语句会被激活很多。也许你们中的一些人知道一个巧妙的诀窍来实现这一点,或者有一个建议如何解决它?
这是用来做什么的?: 此解决方案的用途是一个日志系统,需要获取触发表UPDATED和INSERTED,将每一行转换为XML部分并将它们放入具有XML值或null的临时表中(取决于该特定表上已更改的操作) )。
任何帮助都将不胜感激。
答案 0 :(得分:0)
希望我理解这个问题,但是如果你想将两个列组合成一个,你可以使用
SELECT CONCAT(ColumnA, ColumnB) AS ColumnZ
FROM Table
不确定sql 2005是否支持CONCAT方法,但如果不支持,则需要使用语法,如(expression + expression)
答案 1 :(得分: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
也许?