数据库行列转换问题

aa659401538 2013-05-12 06:31:12

这是我数据库里面的数据 我想变成下面的样子

代码如下

declare @s nvarchar(4000)
Select @s=isnull(@s+',','')+quotename([DutyDate])
from DutyInfo group by[DutyDate]
exec('select * from DutyInfo pivot (max([DutyName]) for [DutyDate] in('+@s+'))b ')

我想按照星期一到星期日的书序排列 该如何修改?
还有我想去掉sign这一列和如何按照DutyDate里面的数据的条件查询显示 该如何添加语句呢?

急啊,求各位大虾帮帮忙 小弟在线等!
...全文
125 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjieloving 2013-05-13
  • 打赏
  • 举报
回复
string str = "declare @s nvarchar(4000)  Select     @s=isnull(@s+',','')+quotename([DutyDate]) from DutyInfo where DutyDate between'" + DateTime.Now.ToString("yyyyMMdd") + "'and'" + dt.ToString("yyyyMMdd") + "'group by [DutyDate]  exec('select * from (SELECT [DutyDate],[Dutyweek],[DutyName] FROM  DutyInfo)a pivot (max([DutyName]) for [DutyDate] in('+@s+'))b order by case when Dutyweek=''星期一'' then 1 when Dutyweek=''星期二'' then 2 when Dutyweek=''星期三'' then 3 when Dutyweek=''星期四'' then 4 when Dutyweek=''星期五'' then 5 when Dutyweek=''星期六'' then 6 when Dutyweek=''星期日'' then 7 END ')";
aa659401538 2013-05-12
  • 打赏
  • 举报
回复
引用 5 楼 DBA_Huangzj 的回复:
[quote=引用 4 楼 aa659401538 的回复:] [quote=引用 3 楼 DBA_Huangzj 的回复:] 别名,因为from 后面需要一个明确的数据集,所以必须要一个别名,否则SQLServer会因为找到这个数据集但是不知道怎么调用而报错,类似于我告诉你我住在中国但是没告诉你我具体地址,你是很难找到我的,你可以用比较好识别的别名,不一定要用一个a、b,这里只是为了简单而已,而且最适合的名字只有你自己清楚。
明白 然后还可以用 a和b来调用里面的数据 比如a.dutydate 之类的?[/quote]对,当你赋予一个别名之后,最省事的方法就是带上别名,如a.dutydate,这样当你一个表使用了几个别名时,就不会由于名字冲突而报错,这里的省事是为了后续调试着想,写的时候当然会比写SELECT *会麻烦一点,但是有些编程规范还是要的[/quote] 好的 谢谢您! 晚安啦!
發糞塗牆 2013-05-12
  • 打赏
  • 举报
回复
引用 4 楼 aa659401538 的回复:
[quote=引用 3 楼 DBA_Huangzj 的回复:] 别名,因为from 后面需要一个明确的数据集,所以必须要一个别名,否则SQLServer会因为找到这个数据集但是不知道怎么调用而报错,类似于我告诉你我住在中国但是没告诉你我具体地址,你是很难找到我的,你可以用比较好识别的别名,不一定要用一个a、b,这里只是为了简单而已,而且最适合的名字只有你自己清楚。
明白 然后还可以用 a和b来调用里面的数据 比如a.dutydate 之类的?[/quote]对,当你赋予一个别名之后,最省事的方法就是带上别名,如a.dutydate,这样当你一个表使用了几个别名时,就不会由于名字冲突而报错,这里的省事是为了后续调试着想,写的时候当然会比写SELECT *会麻烦一点,但是有些编程规范还是要的
aa659401538 2013-05-12
  • 打赏
  • 举报
回复
引用 3 楼 DBA_Huangzj 的回复:
别名,因为from 后面需要一个明确的数据集,所以必须要一个别名,否则SQLServer会因为找到这个数据集但是不知道怎么调用而报错,类似于我告诉你我住在中国但是没告诉你我具体地址,你是很难找到我的,你可以用比较好识别的别名,不一定要用一个a、b,这里只是为了简单而已,而且最适合的名字只有你自己清楚。
明白 然后还可以用 a和b来调用里面的数据 比如a.dutydate 之类的?
發糞塗牆 2013-05-12
  • 打赏
  • 举报
回复
别名,因为from 后面需要一个明确的数据集,所以必须要一个别名,否则SQLServer会因为找到这个数据集但是不知道怎么调用而报错,类似于我告诉你我住在中国但是没告诉你我具体地址,你是很难找到我的,你可以用比较好识别的别名,不一定要用一个a、b,这里只是为了简单而已,而且最适合的名字只有你自己清楚。
aa659401538 2013-05-12
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
你那图片不想一个一个敲,试试:

DECLARE @s NVARCHAR(4000)  
SELECT  @s = ISNULL(@s + ',', '') + QUOTENAME([DutyDate])
FROM    ( SELECT    dutydate ,
                    dutyweek ,
                    dutname
          FROM      DutyInfo
        ) a
GROUP BY [DutyDate]  
EXEC('select * from DutyInfo pivot (max([DutyName]) for [DutyDate] in('+@s+'))b  ')
排序的问题在你另外一个贴回复了
您能告诉我 上面的a和b是什么作用么?
發糞塗牆 2013-05-12
  • 打赏
  • 举报
回复
你那图片不想一个一个敲,试试:

DECLARE @s NVARCHAR(4000)  
SELECT  @s = ISNULL(@s + ',', '') + QUOTENAME([DutyDate])
FROM    ( SELECT    dutydate ,
                    dutyweek ,
                    dutname
          FROM      DutyInfo
        ) a
GROUP BY [DutyDate]  
EXEC('select * from DutyInfo pivot (max([DutyName]) for [DutyDate] in('+@s+'))b  ')
排序的问题在你另外一个贴回复了

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧