zoukankan      html  css  js  c++  java
  • 一个关于实现动态表头的交叉表问题

    大家一定认为这两天我又偷懒了,不更新blog了。大家错啦~~其实是因为我前天遇到了一个技术难题,结果花费了挺长的时间来研究解决。这个难关终于在今天晚上顺利解决了。必须承认一点,学技术有人带着是好很多的,即使没有人带,只要有人愿意为你提供一些可以解决问题的思路也是很好的。废话不多说先上一篇关于我这次碰到的难题描述。


    >-----------------------------------------------------------昨天天问题分割线-------------------------------------------------------------------------------------------<

    前提:

    现在数据库内有一个table。表DirectorWeekSchedule的作用主要是记录领导需要参加的活动日期,内容,其coloum如下:
    DirectorName(领导姓名,类型:nvarchar(50))   ActionDate(活动日期,类型:DateTime)  Contents(活动内容,类型:nvarchar(100))

    以下是数据:
    李书记  2008-4-7 3:30:00  外出开会    
    李书记  2008-4-8 3:30:00  党委会议
    李书记  2008-4-9 3:30:00  审批文件
    李书记  2008-4-10 3:30:00  办公室调研
    陈校长  2008-4-7 3:30:00  审批文件
    陈校长  2008-4-8 3:30:00  办公室调研
    陈校长  2008-4-9 3:30:00  审批文件
    李书记  2008-4-11 3:30:00  办公室调研
    陈校长  2008-4-10 3:30:00  审批文件
    陈校长  2008-4-11 3:30:00  办公室调研


    问题:

    那现在我想通过PIVOT实现对这个表进行行列转换。转换后的样式如下:

    领导名  4月7号     | 4月8号     | 4月9号     | 4月10号      | 4月11号
    ----------------------------------
    李书记  外出开会   | 党委会议   | 审批文件   | 办公室调研   | 办公室调研
    ----------------------------------
    陈校长  审批文件   | 办公室调研 | 审批文件   | 审批文件     | 办公室调研

    那我应该怎样写SQL语句呢?


    ps:1.大家注意了由于这个表是领导工作日程表,所以表的第一列的日期每周都会更换的,不是固定不变的。 那如何实现每隔一周,就更新那个表

    头呢?
        
          2.我有查过msdn,以及网上的一些pivot的教程,但依然不能解决我的问题。首先他们的说明都是上面第一行内容是固定不变的,而我需要定期

    改变的;第二,我有些部分看不懂,特别是 在内嵌套select语句后,他们都写了一个p或者ps的字,然后才PIVOT的。而且最后还有写上AS pt,为什

    么还要改名呢?但表中就没有这个pt的列的喔!!

    有问题的sql语句举例:
    SELECT Category, South, NorthEast, MidWest, West
    FROM (Select Category, Region, Amount from RawData) 

    sq(????)

    PIVOT
    (Sum (Amount)
    FOR Region IN (South, NorthEast, MidWest, West)
    ) AS pt(?????)
       
          3.我看过大部分的教程在使用PIVOT的时候都用上了聚集函数,但我的输出内容是字符串,怎么可能用聚集函数呢?那么它应该用什么函数来聚集

    然后输出呢?

          4.目前我想到能够动态输出日期的方法如下:

          case ActionDate 
         when DATEDIFF ( wk , ActionDate ,GETDATE() )=0 AND DATENAME ( d , ActionDate )=1   then ActionDate
         对actionDate做一个判断,然后符合上述case语句判断要求的话,就输出为星期一,处理其他日子方法同理。
          但研究发现不成功,查询分析器会报错,不能实现这样的动态生成列名!


    解决方案~~我先不写上~~让大家有所思考~~~明天我整理好答案+代码分析后,再发这个问题的解决篇!!!嘻嘻~

  • 相关阅读:
    Kattis
    HDU
    回溯法理解
    算法第5章上机实践报告
    贪心算法理解
    [模板] Dijkstra(堆优化)算法求最短路 Apare_xzc
    【文件管理系统】 Apaer_xzc
    [CCF] 201403-2 窗口 Apare_xzc
    [CCF] 201412-2 Z字形扫描 Apare_xzc
    [CCF] 201503-5 最小花费 Apare_xzc
  • 原文地址:https://www.cnblogs.com/vegaliming/p/1141153.html
Copyright © 2011-2022 走看看