2010-08-17 1 views
0

T-SQL에서 문 : 나는 보여주기 위해 대신하고 싶습니다경우 - 그렇지 내가 현재 표시되는 거래-SQL (MS SQL 서버) 보고서의 결과를 변경하기 위해 노력하고있어

CompanyA  DVCE3 
CompanyB  DVCE2 
CompanyC  DVCE3 
CompanyD  NULL 
CompanyE  DVCE3 

과 :

CompanyA  36 
CompanyB  24 
CompanyC  36 
CompanyD  
CompanyE  36 

나는이에 대한 답변/else 문이나 case 문은,하지만 난 T-SQL에서이 구문의 확실하지 않다 경우 어떤 종류를 사용하는 것입니다 확신 어디서 그것을해야 내 질문에 들어가.

내 기본 쿼리는 다음과 같습니다 : 당신의 도움에 대한

SELECT 
    companyName 
    , term 
FROM tableA a 
    JOIN tableB b on a.id = b.id ... 
WHERE 
    customerNumber IS NOT NULL 
    AND companyName != 'TEST'... ; 

감사합니다.

+2

는 값 (36)을 수행하고 (24)는 특정 컬럼에서 온 (아마도 다른 테이블에서?), 또는는 SQL에 하드 코딩해야 하는가? –

+0

하드 코딩해야합니다. 24와 36을 다른 열에서 가져 오지 않았습니다. 좋은 질문입니다. 단지 더 읽기 쉬운 결과입니다 (DVCE3은 3 년 임기 또는 36 개월을 의미합니다). – dvanaria

답변

5

다음으로 "용어"필드를 대체합니다

CASE WHEN term='DVCE3' THEN '36' WHEN term='DVCE2' THEN '24' ELSE '' END as term 

내가 가독성을 위해 그것을 다시 것 :

CASE 
    WHEN term='DVCE3' THEN '36' 
    WHEN term='DVCE2' THEN '24' 
    ELSE '' 
END as term 
+0

+1 'ELSE' 사건을 처리하기 위해 나는 그것을 알아 채지 못했습니다. –

+0

우수 감사합니다. 단지 약간의 부작용 만은 원문이 NULL을 반환 할 때마다 결과가 숫자 0을 반환한다는 것입니다. – dvanaria

+2

@dvanaria - 숫자로 캐스팅 할 때 기괴한 이유로 SQL이 '0'으로 변환됩니다. 모든 숫자를 작은 따옴표로 묶습니다. ''36 ''이므로 해당 열을 문자열로 처리합니다. –

4

몇 가지 대체물이있는 경우 다음과 같이 case 문을 사용할 수 있습니다.

SELECT 
    companyName 
    ,CASE term WHEN 'DVCE3' THEN '36' WHEN 'DVCE2' THEN '24' ELSE '' END AS term 
FROM tableA a 
    JOIN tableB b on a.id = b.id ... 
WHERE 
    customerNumber IS NOT NULL 
    AND companyName != 'TEST'... ; 

더이 있거나 당신은 어쩌면 (영구 테이블, 뷰 또는 인라인 TVF 중) 당신이 다음에 가입 할 수있는 매핑 테이블을 설정할 수있는 다른 쿼리에서이 논리를 되풀이됩니다.

+0

사소한 세부 사항 : 또한 NULL을 ''로 변환하는 경우를 처리해야합니다. –

+0

@ 조 - 오 나는 그것을 알아 채지 못했습니다. 덕분에 고칠 것입니다. –

1

사례 문이 작동합니다. 그러나 더 나은 대답은 해당 데이터를 테이블에 배치하고 조인을하거나 회사 테이블의 필드에 배치하는 것입니다. 이것은 장기적으로 훨씬 더 확장 가능하게 만듭니다.

CREATE TABLE CompanyTerms (
    id INT, 
    CompanyName NVARCHAR(100) NOT NULL, 
    Term NVARCHAR(100) NULL 
) 

...

SELECT 
    companyName 
    , c.Term 
FROM tableA a 
    JOIN tableB b on a.id = b.id ... 
    JOIN CompanyTerm c ON c.id = a.id 
WHERE 
    customerNumber IS NOT NULL 
    AND companyName != 'TEST'... ; 
+0

이것은 좋은 제안처럼 들리지만이 보고서의 범위에서 결과에서이 열에 어떤 값이 들어갈 수 있는지에 관해서는 확장성에 대해 너무 걱정할 필요가 없습니다. – dvanaria

관련 문제