2011-11-06 8 views
1
declare @T table 
(
    ID int identity primary key, 
    FBK_ID BIGINT null, 
    TWT_ID BIGINT null, 
    LNK_ID NVARCHAR(50) null 
); 

각 레코드는 FBK_ID 또는 TWT_ID 또는 LNK_ID 만 가질 수 있습니다. 해당 필드에 여러 값이있는 레코드가 없습니다.여러 열에 대한 TSQL 사례

그래서 일부 레코드에는 FacebookID 값이 있고 다른 레코드에는 TwitterID가 있고 일부 레코드에는 LinkedInID가 있습니다.

질문 :
가장 빠르고 깨끗한 방법은 무엇입니까?

유형은 NVARCHAR이다 선택 ID, @T

에서 유형 ... (10) 값을 갖는 사람에 따라 중 '페이스 북'이나 '트위터'또는 '링크드 인'동일?

답변

5

은 당신이 뭔가를 할 수 있습니다 :

select 
ID , 
case when FBK_ID is not null then FBK_ID 
    when TWT_ID is not null then TWT_ID 
else LNK_ID end as LinkID 
from @t 
where <rest of your conditions if any> 

당신은 ID 및 특정 소셜 네트워크에 대한 링크 IDS 중 하나를 다시 얻을 것이다.

select 
ID , 
case when FBK_ID is not null then FBK_ID, 
    when TWT_ID is not null then TWT_ID 
else LNK_ID end as LinkID, 
case when FBK_ID is not null then 'F' 
    when TWT_ID is not null then 'T' 
else 'L' end as LinkIDFrom 
from @t 
where <rest of your conditions if any> 
+0

쿨 ... 난 유 같은에서 다양한 분야를 테스트 할 수 몰랐 케이스. 감사 !!! –

0

는 각 레코드 만 FBK_ID 또는 TWT_ID 중 하나를 가질 수 있습니다 : 당신이 알고 싶은 경우에, 또한, 소셜 네트워크의 종류는 linkID를 반환 않습니다에, 당신은 그래서 여분의 열을 추가 할 수 있습니다 속한 또는 LNK_ID. 아니요 레코드에는 해당 필드에 여러 값이 있습니다.

DECLARE @T TABLE 
(
    ID INT IDENTITY PRIMARY KEY, 
    FBK_ID BIGINT NULL, 
    TWT_ID BIGINT NULL, 
    LNK_ID NVARCHAR(50) NULL, 
    CHECK (
     (FBK_ID IS NOT NULL AND TWT_ID IS NULL AND LNK_ID IS NULL) 
     OR (FBK_ID IS NULL AND TWT_ID IS NOT NULL AND LNK_ID IS NULL) 
     OR (FBK_ID IS NULL AND TWT_ID IS NULL AND LNK_ID IS NOT NULL) 
     ) 
); 

이 작업을 수행하는 가장 빠르고 깨끗한 방법은 무엇입니까 :

먼저 테이블을 수정?

복사 + 붙여 넣기를 사용, 매우 빠른 내가 작성하는 방법에 대한, 그리고 내 눈에 깨끗한 같습니다

SELECT ID, CAST('Facebook' AS NVARCHAR(10)) AS Type 
    FROM @T 
WHERE FBK_ID IS NOT NULL 
UNION 
SELECT ID, CAST('Twitter' AS NVARCHAR(10)) AS Type 
    FROM @T 
WHERE TWT_ID IS NOT NULL 
UNION 
SELECT ID, CAST('LinkedIn' AS NVARCHAR(10)) AS Type 
    FROM @T 
WHERE LNK_ID IS NOT NULL; 
+0

케이스 대신 유니온을 사용 하시겠습니까? –

+1

@ Filu : 예, 항상 SQL을 사용하여 '고양이를 피하십시오'라는 한 가지 이상의 방법이 있습니다.) – onedaywhen