SQL - 插入带有条件串联的表

时间:2014-08-12 23:33:54

标签: sql sql-server concatenation

我需要将数据插入到具有串联的表中,具体取决于其中一列的值。 E.g。

表A

+-------+-----------+-----------+
| rowid | objectIdA | objectIdB |
+-------+-----------+-----------+
|  1    |         1 |         2 | 
|  2    |         1 |      null | 
|  3    |         2 |         4 | 
|  4    |         5 |      null | 
+-------+-----------+-----------+

会导致表B

+-------+-----------+
| rowid | concatCol | 
+-------+-----------+
|  1    |      1_2  |
|  2    |      1    | 
|  3    |      2_4  |
|  4    |      5    |
+-------+-----------+

因此,如果其中一列不为空,则基本上与下划线连接。

3 个答案:

答案 0 :(得分:2)

怎么样?

INSERT INTO tableB(rowid, concatCol)
SELECT
    rowid,
    objectIdA + CASE WHEN objectIDB IS NULL THEN '' ELSE '_' + objectIDB END 
FROM
    TableA

答案 1 :(得分:0)

取决于您的数据库系统和编程语言。纯SQL解决方案可能会非常难看(特别是如果您需要支持更新和插入)。

INSERT INTO tableB(rowid, concatCol)
    (SELECT rowid, objectIdA+'_'+objectIDB FROM tableA)

如果+是串联操作(Oracle使用||我认为)并且第二个表是空的(并且如果rowid实际上是可插入的),则会工作。如果列可以为空,则可以使用CASE的RDBMS函数来区分需要添加第二行和分隔符的情况,或者跳过这两种情况。

答案 2 :(得分:0)

尝试, 假设您的列是整数数据类型

select rowid,cast(objectIdA as varchar(10)) + case when objectIdB is null then '' else '_'+
             cast(objectIdB as varchar(10)) end
from tab1