使用来自多个列的数据填充单个SQL Server列,并将值添加前缀

时间:2013-10-23 19:03:15

标签: sql sql-insert

更新 我在插入值并将其分配给p_id = 0之前最终只使用了插入,结果就像我需要它一样。谢谢!

INSERT INTO table2 (p_id,value)
Values(0,@@SYS=DEV');

我正在尝试将Table1中的3列组合在一起,并将Table2中的值放在一列中,但我还想在值前加上A,& B,& C,如下所示。 P_Id是自动递增。

表1

+---------+--------+-----------+
| Emp_ID  | Status | hire_date | 
+---------+--------+-----------+
| 12345   | happy  | 10/10/2005|
| 54321   | sad    | 12/01/2009|
+---------+--------+-----------+

插入表2 ....

我以为我可以在这个解决方案中插入一个静态行,但它在每个新的emp_id上重复,而我只需要在顶行中一次。

+------+--------------+
| P_Id |    Info      | 
+---------------------+
| 1    | @@=Dev       |
| 2    | A,12345      |
| 3    | B,happy      |
| 4    | C,10/10/2005 | 
| 5    | A,54321      |
| 6    | B,sad        |
| 7    | C,12/01/2009 |
+------+--------------+

非常感谢任何帮助!环境是SQL Server 2008。

2 个答案:

答案 0 :(得分:2)

你可以在一个选择中执行此操作,如下所示:

with cte as (
    select T.Emp_ID, C.Value
    from Table1 as T
        outer apply (values
            ('A,' + cast(T.Emp_ID as varchar(max))),
            ('B,' + T.Status),
            ('C,' + convert(varchar(10), T.hire_date, 103))
        ) as C(Value)
)
-- insert into Table2
select
    row_number() over(order by Emp_ID, Value) as p_id,
    Value
from cte

<强> sql fiddle demo

答案 1 :(得分:0)

Insert Into Table2
Select 'A, '+Convert(varchar(10),Emp_ID) From Table1
Union
Select 'B, '+Status From Table1
Union
Select 'C, '+convert(varchar(12),Hire_Date) From Table1