将2个一列语句组合成1个两列语句

时间:2012-10-05 08:14:44

标签: sql-server-2005

假设我有两个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的临时表中(取决于该特定表上已更改的操作) )。

任何帮助都将不胜感激。

2 个答案:

答案 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

也许?