设有一张表结构如:(日期,项目,内容)
数据如下
日期 项目 内容
2003/7/1 早餐 好
2003/7/1 中餐 不好
2003/7/1 晚餐 很好
2003/7/1 加餐 很好
2003/7/2 早餐 一般
2003/7/2 中餐 好
2003/7/2 晚餐 差
2003/7/3 早餐 一般
2003/7/3 中餐 好 (7.3半天班,没有晚餐)
2003/7/4 早餐 一般
2003/7/4 中餐 好
2003/7/4 晚餐 差
2003/7/5 早餐 一般
2003/7/5 中餐 好
2003/7/5 晚餐 差
如一个月有30天,而每天有早、中、晚、加餐四餐。这一张表记录了一天吃了些什么。
我现在要对一个月用餐情况进行统计,要求显示结构为:
早餐 中餐 晚餐 加餐
日期
2003/7/1 好 不好 很好 很好
2003/7/2 一般 好 差
2003/7/3 ……
试问我应用什么方法来得到这样的一张表?一条 SQL 语句可以吗?存贮过程怎么做?
select 日期,
max(case when 项目='早餐' then '内容' end) 早餐,
max(case when 项目='中餐' then '内容' end) 中餐,
max(case when 项目='晚餐' then '内容' end) 晚餐,
max(case when 项目='加餐' then '内容' end) 加餐
from 一张表 group by 日期
--------------------------------------------------
declare @sql varchar(8000)
set @sql = 'select 日期'
select @sql = @sql + 'max(case 项目 when '''+项目+'''
then 内容 end) '+项目+','
from (select distinct 项目 from 一张表) as a
select @sql = left(@sql,len(@sql)-1) + ' from 一张表 group by 日期'
exec(@sql)
--------------------------------------------------
select a.'日期',breakfast= (select b.'项目' from table b where b.'项目' = '早餐' and b.'日期' = a.'日期'),
lunch= (select c.'项目' from table c where c.'项目' = '午餐' and c.'日期' = a.'日期'),
supper = (select d.'项目' from table d where d.'项目' = '晚餐' and d.'日期' = a.'日期')
from table a
order by '日期'
附录:一个用ASP编写的可运行示例源代码下载:
http://blog.why100000.com/wp-content/uploads/2010/07/cross.rar
作者:张庆(网眼) 西安 PHP 教育培训中心 2003-7-5
来自“网眼视界”:http://blog.why100000.com
作者微博:http://t.qq.com/zhangking
“十万个为什么”电脑学习网:http://www.why100000.com