如何使用pivot在gridview中显示列值

时间:2013-07-15 04:14:26

标签: row-value-expression

我想在gridview的列标题和

中显示特定月份的日期

应在

下显示相应的值

选择

不同

cardno,名字,

min(convert(char(5),time,108))over(cardno分区,CONVERT(varchar(20),time,

102))+'| '+ max(转换(char(5),时间,108))(cardno分区,

CONVERT(varchar(20),time,102))[exit / in out]

FROM Events

以下是上述查询的输出

cardno name退出/退出 100白菜09:30 | 18:30 101 kiran 09:55 | 18:45

我想要像这样的输出

cardno name 2013-07-01 2013-07-12 ................................... 2013年7月31日

100 baiju 09:30 | 18:30 null

101 kiran 09:35 | 18:45 null

表示应该在gridview标题中显示整月中的日期。如果没有值,则应该为null

我试过这个例子,但显示错误

将@dte声明为datetime ='2013-07-01'

将@StDt声明为Datetime = DATEADD(dd, - (DAY(GETDATE()) - 1),@ dte)

将@EnDt声明为datetime = DATEADD(s,-1,DATEADD(mm,DATEDIFF(m,0,@ dte)+1,0))

将@Cnt声明为int = datepart(dd,@ EnDt)

将@inc声明为int = 0

创建表#temp(Month_date datetime)

而@inc< @cnt

开始

插入#temp

选择DATEADD(dd,@ cinc,DATEADD(dd, - (DAY(@dte)-1),@ dte))

设置@inc = @inc + 1 结束 DECLARE @cols AS NVARCHAR(MAX),     @query AS NVARCHAR(MAX)

选择@cols = STUFF((SELECT distinct','+ QUOTENAME([date])                     从事件             FOR XML PATH(''),TYPE             ).value('。','NVARCHAR(MAX)')         ,1,1, '')

SET @ Query ='SELECT distinct cardno,name,'+ @ cols +'  来自(     选择t.Month_date,e.cardno,e.date     来自#temp t     t.Month_date = e.date上的右外连接事件 ) X 枢 (     min(convert(char(5),time,108))over(cardno分区,CONVERT(varchar(20),time,102))+'| '+ max(convert(char(5),time,108))over(cardno,CONVERT(varchar(20),time,102)

for date in  (' + @cols + ')

)p 按Month_date'

排序

EXEC(@query)

drop table #temp

这是错误消息

Msg 207,Level 16,State 1,Line 19

无效的列名称'date'。

Msg 402,Level 16,State 1,Line 36

数据类型nvarchar(max)和varchar在“|”中不兼容操作

如何解决这个问题

此致

白菊

0 个答案:

没有答案