2014-03-24 35 views
0

我一直在使用CTE來構建一些我需要的特殊格式的表,只要數據來自一個表或者我可以加入,但現在我面臨的情況是,我沒有任何共同的領域加入。Sql Server - 使用CTE結合多個表中的值而不加入

這裏是理想的歸宿

+------+---------+ 
| p_id | value | 
+------+---------+ 
| 1 | 1,55556 | 
| 2 | 2,1212 | 
| 3 | 2,6868 | 
| 4 | 2,4545 | 
| 5 | 1,55557 | 
| 6 | 2,1212 | 
| 7 | 2,6868 | 
| 8 | 2,4545 | 
+------+---------+ 

下面是一些示例表

CREATE TABLE Table1 
([Emp_ID] varchar(10)) 
; 

INSERT INTO Table1 
([Emp_ID]) 
VALUES 
(55556), 
(55557) 
; 

CREATE TABLE Table2 
([Type] Varchar(10), [Type_ID] varchar(10)) 
; 

INSERT INTO Table2 
([Type], [Type_ID]) 
VALUES 
('Black', '1212'), 
('Red', '6868'), 
('Orange', '4545') 
; 

這裏是CTE與單個表

GO 
WITH cte as (
    SELECT t1.[emp_id], C.Value 
    FROM table1 t1 
     outer apply (values 
      ('1,' + t1.[emp_id]) 
     ) as C(Value) 
) 

SELECT 
    row_number() over(order by [emp_id], value) as p_id, 
    value 
FROM cte 

但我想要的工作是這樣的...除了當我這樣做時,我碰到了「多部分標識符」t1.emp_id「不能結合」

GO 
WITH cte as (
    SELECT t1.[emp_id], C.Value 
    FROM table1 t1, table2 t2 
     outer apply (values 
      ('1,' + t1.[emp_id]), 
      ('2,' + t2.type_id) 
     ) as C(Value) 
) 

SELECT 
    row_number() over(order by [emp_id], value) as p_id, 
    value 
FROM cte 

現在,我可以做我以前做過,這是做一個單獨的列,除了這一次,我在表2處理價值幾百,我需要插入所以每個值是不實際了。

在此先感謝您的任何建議。

回答

1

以下是如何獲得所需的輸出。但我有這種感覺我錯過了這一點:

with cte as 
(
    select '2,'+type_id as value, emp_id 
    from table1 t1, table2 t2 

    union all 

    select '1,'+emp_id as value, emp_id 
    from table1 
) 
select value, 
    row_number() over(order by emp_id, value) as p_id 
from cte 
+0

這就是它!我不知道我可以在沒有寫完段落的情況下傳達我正在做的事情,但是這完成了我正在嘗試做的事情,基本上我試圖輸出一個文本文件,該文件具有employee_id作爲第一項,然後每個在2中,項目在其配置文件上定義了一些被導入的東西。這非常有幫助,謝謝Tom! – Jeremy