您的位置:首页 > 编程语言 > ASP

交叉表查询生成问题

2010-07-06 01:17 155 查看
    设有一张表结构如:(日期,项目,内容)

    数据如下

       日期    项目     内容

    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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql table asp 教育 php 2010
相关文章推荐