数据库“交叉表”查询的实现

大软件公司招聘时常考题之一。

设有一张表结构如:(日期,项目,内容) 数据如下 日期 项目 内容 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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值