2014-12-05 2 views
1

유무 쿼리와 같은 :는 테이블의 각 열에 대해 서로 다른 데이터를 선택하는 방법

declare @type int = 1 

select cf.id, cf.name 
from dbo.tbl1 cf 
inner join dbo.tbl2 ct on cf.id = ct.field_id and ct.[type_id] = @type 

응답은 다음과 같습니다

ID NAME 
1 number 
2 city 
4 location 
5 username 

내가 선택에서 각각의 이름을 얻어야 응답 한 필드를 추가하려면 무엇인가 :

when name = number then select number from myTbl 
when name = city then select name from region_tbl 
when name = location then select name from location_tbl 
when name = username then select user from user_tbl 

및 응답과 같이해야합니다 :

ID NAME  Field 
1 number  1   
2 city  Paris 
4 location some_location 
5 username admin 

이렇게 할 수 있습니까? 당신은 CASE WHEN THEN을 사용할 수 있습니다

ID NAME  command 
1 number  1   
2 city  Paris 
4 location some_location 
5 username admin 
+0

'CASE and subquery'를 사용하여 원하는 결과를 얻을 수 있습니다 –

답변

2

:

또는 내가 테이블에 하나 더 열을 추가 할 수 있으며 같은 응답이 될 것입니다 : 같은

ID NAME  command 
1 number select number from myTbl 
2 city  select name from region_tbl 
4 location select name from location_tbl 
5 username select user from user_tbl 

동적 명령을 실행 응답해야한다 하위 쿼리를 사용하여 원하는 결과를 얻으려는 경우

데이터 유형이 각각 다른 경우 테이블 열은 다음 VARCHAR

select cf.id, cf.name 
    thirdColumn = CASE 
        WHEN cf.name = 'number' THEN CAST((select TOP 1 number from myTbl) AS VARCHAR) 
        WHEN cf.name = 'city' THEN CAST((select TOP 1 name from region_tbl) AS VARCHAR) 
        WHEN cf.name = 'location' THEN CAST((select TOP 1 name from location_tbl) AS VARCHAR) 
        WHEN cf.name = 'username' THEN CAST((select TOP 1 user from user_tbl) AS VARCHAR) 
    from dbo.tbl1 cf 
    inner join dbo.tbl2 ct on cf.id = ct.field_id and ct.[type_id] = @type 

주처럼 하나 개의 균일 한 유형으로 하위 쿼리의 결과를 캐스팅해야 할 수도 있습니다 - 당신이 여러 행을 줄 발생할 수 있습니다 TOP 또는 WHERE 조건을 사용하지 않고 하위 쿼리가 할 수있는 수익으로의 오류가 발생합니다. 하위 쿼리는 항상 1 행을 반환하도록 조정합니다.

관련 문제