0

假设我有两个选择语句(这只是一个示例。数据也可以是文本):

 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|

这两个语句没有键,但在行上确实属于彼此(除非其中一个为空)。

我知道这可以使用 while 循环、游标和临时表来完成。问题是我需要它快速并且不要使用那么多资源,因为这个语句会被触发很多。也许你们中的一些人知道一个巧妙的技巧来实现这一点,或者有一个如何解决它的建议?

这是做什么用的?: 这个解决方案的用途是一个日志系统,它需要获取触发器表 UPDATED 和 INSERTED,将每一行转换为 XML 部分并将它们放入带有 XML 值或 null 的临时表中(取决于对该特定表的更改操作)。

任何帮助,将不胜感激。

4

2 回答 2

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 回答
0

希望我理解这个问题,但如果你想将两列合并为一列,你可以使用

SELECT CONCAT(ColumnA, ColumnB) AS ColumnZ
FROM Table

不确定 sql 2005 是否支持 CONCAT 方法,但如果不支持,则需要使用诸如 (expression + expression) 之类的语法

于 2012-10-05T08:21:12.483 回答