2015-01-02 2 views
1
Create table test 
(
id int, 
Name varchar(50), 
ObjType varchar(50) 
Typeval varchar(50) 
) 

의 열 값을 기준으로 테이블 중 하나에서 데이터를 검색, 나는 TBL1에서 열을 검색 할 TBL1 및 테이블 "테스트"에서 OBJTYPE 가치를 바탕으로 TBL2나는 이름이 개 다른 테이블이 MSSQL

이 있다고 또는 tbl2. NOte : tbl1과 tbl2에서 검색하려는 열 이름이 동일하지 않습니다. 이 같은

뭔가 :

SELECT Name, Objtype,id, typeval, 
Desc = CASE WHEN objtype='abc' THEN 
       SELECT col1 from tbl1 WHERE cond=id (col from table test) 
      WHEN objtype = 'xyz' THEN 
       SELECT cola from tbl2 WHERE crit = id (col from table test) 

어떤 몸이 나에게 노조 문을 사용할

+1

테스트, tb1과 tbl2 사이의 관계?. 그렇다면 조인 한 다음 objtype – knkarthick24

+0

에 기초한 사례를 사용하여 tbl1 또는 tbl2에서 끌어오고 tbl1은 관련되지 않습니다. 기본적으로 테스트 마스터 데이터의 ID와 열이, 내가 마스터 테이블에서 설명을 가져올 필요가있다. 우리는 더 많은 데이터를 저장할 수있는 하나의 마스터 테이블을 가지고 있습니다 – Saravanan

+0

@Saravanan 테이블이 관련이없는 경우, 페칭 로직이 무엇입니까? 관계가 없으면 tbl1과 tbl2에는 각각 1 행만 있고 항상 그 중 하나를 가져 오지 않으면 작동하지 않습니다. 그러나 이것은 또 다른 문제입니다. – mordack550

답변

0

난, (TBL1 연합 선택 COL1에서 TBL2에서 OBJTYPE을 COL1, OBJTYPE 해당) 테이블 T1 및 T2 AS CTE WITH

가입하여

SELECT 이름 팽창 계수를 생성하여이 문제를 해결 OBJTYPE, ID는, typeval, 소중한 의견 게시 된 모든 사람에 대한 시험 t FROM 설명 로

감사 (CTE C FROM WHERE이 C.ObjType = t.ObjType을 COL1을 선택)

0

시도를 안내 할 수 있습니다.

SELECT t.objtype as objtype, t1.col1 as fieldvalue 
FROM test t LEFT JOIN tbl1 t1 ON t.cond= t1.id 
    WHERE t.objtype = 'abc' 
UNION ALL 
SELECT t.objtype as objtype, t2.cola as fieldvalue 
FROM test t LEFT JOIN tbl2 t2 ON t.crit= t2.id 
    WHERE t.objtype = 'xyz' 

작동하려면 약간의 변경이 필요하지만 도움이 될 수 있습니다.

+0

입니다. 같은 필요에 따라 두 개의 열을 가졌으므로이 쿼리가 수정되었습니다. 어쨌든 고마워요. – Saravanan

관련 문제