2017-11-02 3 views
0

두 테이블 (tableA 및 tableB)에 이름 열이 있습니다. tableA의 이름 열은 NAME이라고 할 수 있지만 tableB의 열은 FULLNAME이라고 할 수 있지만 둘 다 같은 값을 가져야합니다.WHERE 절에서 열 변수 사용

이 두 열 값이 같지 않은 구성원 ID를 가져 오는 쿼리를 작성하려고합니다. 그러나 이것은 매개 변수를 통해 확인하는 열 이름을 전달하고 싶습니다. SSRS 보고서에 표시 될 것이므로 앞으로이 두 테이블간에 다른 열을 비교할 수 있기를 바랍니다. . 이 같은

뭔가 :

DECLARE @COLUMN_A VARCHAR(50), @COLUMN_B VARCHAR(50) 

/* COLUMN PARAMS WILL BE PASSED IN VIA SSRS */ 

SELECT 
    DISTINCT(MEMBER_ID) 
FROM 
    TABLE_A 
JOIN TABLE_B 
    ON (TABLE_A.MEMBER_ID = TABLE_B.MEMBER_ID) 
WHERE 
    @COLUMN_A <> @COLUMN_B 

이 가능한 같은가요?

편집 :

또는이 작품이 마음에 드시나요?

DECLARE는 @column VARCHAR (50)

SELECT @column = 'FIRST_NAME'; 
SELECT DISTINCT 
    MEMBR_ID, 
    case  
     when @column='FIRST_NAME' then MEMBR_FIRST_NAME 
     when @column='LAST_NAME' then MEMBR_LAST_NAME 


    end TABLE_1, 
    case 
     when @column='FIRST_NAME' then FIRSTNAME 
     when @column='LAST_NAME' then LASTNAME 
    end TABLE_2, 
    @column 
FROM 
    TABLE_1 
JOIN TABLE_2 
    ON (TABLE_1.MEMBR_ID = TABLE_2.MEMBR_ID) 

WHERE 
    [email protected] <> [email protected] 
+0

동적 SQL은 당신이 @COLUMN_A 교체하려고 – Prisoner

답변

0

이 가능한 같은가요?

기술적으로 구문이 좋습니다. where은 두 개의 상수 문자열을 비교합니다. 결과는 두 행이 같은지 여부에 따라 모든 행 또는 행이 없습니다.

위 항목에 대한 평가가 있습니까? 아니 그들은하지 않습니다. 열 이름, 테이블 이름, 스키마 이름, 데이터베이스 이름, 함수 이름 또는 연산자 (예 :)와 같은 식별자에 대해 SQL 문에 매개 변수를 전달할 수 없습니다.

당신이 사용하여 동적 SQL을 할 수 있지만 당신이 이름을 연결해야합니다 :

DECLARE @sql NVARCHAR(MAX); 

SET @sql = ' 
SELECT DISTINCT A.MEMBER_ID 
FROM TABLE_A A JOIN 
    TABLE_B B 
    ON A.MEMBER_ID = B.MEMBER_ID 
WHERE [email protected]_A <> [email protected]_B 
'; 

SET @sql = REPLACE(@sql '@COLUMN_A', COLUMN_A); 
SET @sql = REPLACE(@sql '@COLUMN_B', COLUMN_B); 

exec sp_executesql @sql; 
+0

덕분에, 그 유일한 문제는 당신의 친구입니다 B, 변수 나 실제 열 이름 (세 번째 인수)을 유효한 열 이름으로 인식하지 못합니다 ... – Jim

+0

nevermind REPLACE의 세 번째 인수가 문자열이어야합니다. 감사합니다 – Jim

관련 문제