2017-02-03 64 views
1

我试图在SQL Server中使用CASE语句来解决我遇到的问题。如何在SQL Server中使用CASE语句

这是我的样本数据:

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

这是我在SQL Server CASE声明

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 bymax

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

+1

如果您在2008年或更高版本,这是正确的答案。 –

0

CASE语句与了Syntex和示例

了Syntex CASE表达式

WHEN value_1 THEN result_1 

    WHEN value_2 THEN result_2 

    ... 
WHEN value_n THEN result_n 



ELSE result 

END 

OR

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语句这样的CASE语句 CASE

WHEN website_id = 1 THEN 'TechOnTheNet.com' 

    WHEN website_id = 2 THEN 'CheckYourMath.com' 

    ELSE 'BigActivities.com' 

END 

FROM contacts;