关于SQL查询行变列有关问题
关于SQL查询行变列问题
表格式为
地点名称 时间 关键字1 值
杭州 2015-3-16-1 SO2 10
杭州 2015-3-16-2 SO2 12
杭州 2015-3-16-3 SO2 13
杭州 2015-3-16-1 NO2 7
杭州 2015-3-16-2 NO2 11
杭州 2015-3-16-3 NO2 8
SQL怎么查询变成
地点名称 时间 SO2值 NO2值
杭州 2015-3-16-1 10 7
杭州 2015-3-16-2 12 11
杭州 2015-3-16-3 13 8
可以实现么
------解决思路----------------------
------解决思路----------------------
寫一個靜態sql
表格式为
地点名称 时间 关键字1 值
杭州 2015-3-16-1 SO2 10
杭州 2015-3-16-2 SO2 12
杭州 2015-3-16-3 SO2 13
杭州 2015-3-16-1 NO2 7
杭州 2015-3-16-2 NO2 11
杭州 2015-3-16-3 NO2 8
SQL怎么查询变成
地点名称 时间 SO2值 NO2值
杭州 2015-3-16-1 10 7
杭州 2015-3-16-2 12 11
杭州 2015-3-16-3 13 8
可以实现么
------解决思路----------------------
--动态
DECLARE @SQL VARCHAR(8000)--SQL2005+可以用VARCHAR(MAX)代替
SET @SQL='SELECT 地点名称,时间'
SELECT @SQL=@SQL+'
,ISNULL(MAX(CASE WHEN 关键字1='''+关键字1+''' THEN 值 END),0)['+关键字1+']'
FROM TB GROUP BY 关键字1
SET @SQL=@SQL+'FROM TB GROUP BY 地点名称,时间'
PRINT @SQL
EXEC(@SQL)
--静态
SELECT 地点名称,时间
,ISNULL(MAX(CASE WHEN 关键字1='NO2' THEN 值 END),0)[NO2]
,ISNULL(MAX(CASE WHEN 关键字1='SO2' THEN 值 END),0)[SO2]
FROM TB
GROUP BY 地点名称,时间
------解决思路----------------------
寫一個靜態sql
select 地点名称,时间,
sum(case when 关键字1='SO2' then 值 else 0 end) as SO2值,
sum(case when 关键字1='NO2' then 值 else 0 end) as NO2值
from tablename
group by 地点名称,时间
order by 地点名称,时间