我想在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 不兼容 操作员。
如何解决这个问题
问候
白菊