首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

求一句SQL语句解决思路

2012-05-27 
求一句SQL语句表数据如下:年份月份收入20111月20020112月30020113月50020121月60020122月700要求查询结果

求一句SQL语句
表数据如下:
年份 月份 收入
2011 1月 200
2011 2月 300
2011 3月 500
2012 1月 600
2012 2月 700

要求查询结果如下:
年份 1月 2月 3月
2011 200 300 500
2012 600 700 NULL

谢谢!

[解决办法]
CREATE TABLE Test20120522
(年份 int, 月份 varchar(50), 收入 int)

INSERT INTO Test20120522
SELECT 2011, '1月', 200
UNION 
SELECT 2011, '2月', 300
UNION
SELECT 2011, '3月', 500
UNION
SELECT 2012, '1月', 600
UNION
SELECT 2012, '2月', 700

--- sql 2000

SELECT 年份, min(case when 月份 = '1月' then 收入 else null end) as '1月',
min(CASE WHEN 月份 = '2月' then 收入 else NULL end) as '2月',
min(CASE WHEN 月份 = '3月' then 收入 else NULL end) as '3月'
FROM test20120522 GROUP BY 年份

--- sql 2005

SELECT * FROM test20120522 PIVOT(sum(收入) for 月份 in ([1月], [2月], [3月])

[解决办法]

SQL code
--给你提供一种方法,适合不固定列的行列转换create  table t(年份 varchar(20), 月份 varchar(20), 收入 float)insert into t select '2011','1月',200 union allselect '2011','2月',300 union allselect '2011','3月',500 union allselect '2012','1月',600 union allselect '2012','2月',700--select * From @tdeclare @sql varchar(8000)set @sql='select 年份'select @sql=@sql+ ',max(case 月份 when '''+月份+''' then 收入 end) as ['+月份+']' from (select distinct 月份 from t) as Aset @sql=@sql+' from t group by 年份 order by 年份'exec (@sql)drop table t/*年份    1月     2月     3月------ ------ ------ ------2011   200    300    5002012   600    700    null(2 个数据列受到影响)*/ 

热点排行