2017-02-03 4 views
1

Я пытаюсь использовать оператор CASE в SQL Server для решения проблемы, которая у меня есть.Как использовать оператор CASE в SQL Server

Это моя выборка данных:

FY COUNTRY LAT   LON   CHECK  ID 
------------------------------------------------------------ 
2013 MEX  35.85311 -118.1385 Y   80845 
2013 USA  35.85311 -118.1385 Y   80845 

Вот мой CASE заявление в SQL Server

SELECT 
    FY, 
    LAT, LON, 
    CASE 
     WHEN COUNTRY = 'MEX' 
      THEN 'Y' 
    END AS MEX, 
    CASE 
     WHEN COUNTRY = 'USA' 
      THEN 'Y' 
    END AS USA, 
    ID 
FROM 
    TEMP 

Мой результат:

FY  LAT   LON  MEX USA ID 
--------------------------------------------------- 
2013 35.85311 -118.1385 Y (null) 80845 
2013 35.85311 -118.1385(null) Y  80845 

Есть ли способ, чтобы преобразовать мой результат до:

FY  LAT   LON  MEX  USA  ID 
-------------------------------------------------------- 
2013 35.85311 -118.1385 Y  Y   80845 
+0

какая версия SQL-сервера? –

ответ

5

Использование group by и max:

select 
    fy, lat, lon, 
    max(case when country = 'MEX' then 'Y' end) as mex, 
    max(case when country = 'USA' then 'Y' end) as usa, 
    id 
from temp 
group by 
fy, lat, lon, id; 

или могут использовать PIVOT:

select fy, lat, lon, id, mex, usa 
from temp t 
pivot (max(check) for country in ([mex],[usa])) p; 
+0

@ GurV, где бы вы ни находились, где бы вы ни жили, я хотел бы поблагодарить вас за вашу помощь! Это работает именно то, что я искал. – joe

2

Это также упоминается как PIVOT заявление

SELECT FY, LAT, LON, ID, MEX, USA 
FROM  TEMP t 
PIVOT (
    MAX([CHECK]) 
    FOR [COUNTRY] IN([MEX],[USA]) 
) p 
+0

Спасибо за помощь! Joe – joe

+1

Это правильный ответ, если вы в 2008 году или выше. –

0

сазе с Синтекс и пример

Синтекс СЛУЧАЙ выражение

WHEN value_1 THEN result_1 

    WHEN value_2 THEN result_2 

    ... 
WHEN value_n THEN result_n 



ELSE result 

END 

ИЛИ

CASE 
WHEN condition_1 THEN result_1 
    WHEN condition_2 THEN result_2 
    ... 
WHEN condition_n THEN result_n 
    ELSE result 
END 

Пример

SELECT contact_id, 
CASE website_id 
WHEN 1 THEN 'TechOnTheNet.com' 
    WHEN 2 THEN 'CheckYourMath.com' 
    ELSE 'BigActivities.com' 
END 
FROM contacts; 

Или вы могли бы написать заявление SQL с помощью утверждение СЛУЧАЙ как это СЛУЧАЙ

WHEN website_id = 1 THEN 'TechOnTheNet.com' 

    WHEN website_id = 2 THEN 'CheckYourMath.com' 

    ELSE 'BigActivities.com' 

END 

ОТ контактов;