2013-10-23 61 views
2

更新我結束了在插入值之前插入值並將其分配給p_id = 0,結果如我所需它是。謝謝!使用多列數據填充單個SQL Server列並添加前綴值

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

我想3列從表1相結合,並放置在表2中的值一列,但我也想用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的

+0

你有沒有考慮使用視圖,而不是反規範化你的表成不同的結構?當你將同一組數據保存在兩個表中時,你現在不得不擔心這兩個數據保持同步...... –

+0

我只使用這個表來爲系統生成正確格式化的導入.txt文件接口,這將被每天覆蓋。 – Jeremy

回答

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

+0

這真棒,它完美的作品!你有任何建議如何在填充表之前添加一個字符串到第一行? (即第1行應該總是被重寫爲p_id = 1,value = @@ SYS = DEV? – Jeremy

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 
相關問題