0

我想在gridview的列标题中显示特定月份的日期和

对应的值应该显示在

选择

清楚的

卡诺, 名字,

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) ) [exit/in out]

从事件

以下是上述查询的输出

cardno name exit/in out 100 baiju 09:30 | 18:30 101 基兰 09:55 | 18:45

我想要这样的输出

卡号名称 2013-07-01 2013-07-12 ....................................2013-07 -31

100 白驹 09:30|18:30 空

101 基兰 09:35|18:45 空

意味着一个月的一整天应该显示在 gridview 标题中。如果没有值,它应该为 null

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

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

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

将@EnDt 声明为日期时间 = 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, @inc, DATEADD(dd,-(DAY(@dte)-1),@dte))

set @inc = @inc + 1 end DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME([date]) from events FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1, '')

SET @Query='SELECT distinct cardno,name,'+ @cols+' from (select t.Month_date,e.cardno,e.date from #temp t right outer join events on t.Month_date=e.date) x pivot ( 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 order by Month_date'

执行(@查询)

删除表#temp

这是错误信息

消息 207,第 16 层,状态 1,第 19 行

列名“日期”无效。

消息 402,第 16 级,状态 1,第 36 行

'|' 中的数据类型 nvarchar(max) 和 varchar 不兼容 操作员。

如何解决这个问题

问候

白菊

4

0 回答 0