2014-03-24 1 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