注册 登录
编程论坛 SQL Server论坛

求sql语句修改

jsfchqf 发布于 2015-09-15 15:39, 1621 次点击
declare @sql varchar(8000)
set @sql='select ygxm'
select @sql=@sql+',case kqdate when '''+kqdate+''' then kqtime else 0 end ['+kqdate+']'
from (select distinct kqdate from kq2015031) as a order by kqdate
set @sql=@sql + ' from kq2015031 group by kqdate,ygxm,kqtime'
exec(@sql)

以上代码执行后显示
消息 245,级别 16,状态 1,第 1 行
在将 nvarchar 值 '12:21:30' 转换成数据类型 int 时失败。

表结构为
bm nvarchar(10),
yggh nvarchar(10),
ygxm nvarchar(10),
kqdate nvarchar(10),
kqtime nvarchar(10)

由于本人刚刚开始学习SQL知识,对一些知识掌握得还不够熟悉,无法找到出错的原因,请哪位老大给予指出,本人不胜感激!!!!
5 回复
#2
mxbing19842015-09-16 09:30
declare @sql varchar(8000)
set @sql='select ygxm'
select @sql=@sql+',case kqdate when '''+kqdate+''' then kqtime else ''0'' end ['+kqdate+']'
from (select distinct kqdate from kq2015031) as a order by kqdate
set @sql=@sql + ' from kq2015031 group by kqdate,ygxm,kqtime'
exec(@sql)
#3
jsfchqf2015-09-16 13:45
回复 2楼 mxbing1984
谢谢老大的指点,错误已经解决,但是显示后的结果与我想要得到的结果不符.员工姓名这一列仍然显示的是所有刷卡记录的数量,我原来的目的是想第一列显示姓名,第二列显示本月的第天的考勤记录,依次类推,将该员工当月的考勤记录显示在一行上
只有本站会员才能查看附件,请 登录
#4
mxbing19842015-09-16 14:43
--用你的Excel导入的数据测试的
Declare @Sql Varchar(8000)=''
Declare @Where Varchar(6000)=''
Select @Where=@Where+',['+考勤时间+']'
From
(
    Select distinct convert(varchar(10),考勤时间,121) As 考勤时间
    From dbo.Sheet2$
) S
 

Set @Sql='
Select * From
(
    Select *,
    ROW_NUMBER() Over(Partition By 员工工号,年月日 Order by 时分秒) As 序号  
    From (
        Select 员工工号,姓名,
        Convert(Varchar(10),考勤时间,121) As 年月日,
        Convert(varchar(5),考勤时间,8) As 时分秒
        From dbo.Sheet2$
        )M
)N
pivot
(
    Max(时分秒)
    For
    年月日 in('+STUFF(@Where,1,1,'')+')
)p'

Exec (@sql)

只有本站会员才能查看附件,请 登录
#5
jsfchqf2015-09-17 08:27
已经搞定,高人啦,谢谢了!!!!,这些知识一般的书籍好像没有介绍,能推荐一些吗,我也想提高提高.
#6
mxbing19842015-09-17 09:04
1.SQL2005
Microsoft SQL Server 2005技术内幕:T-SQL查询
Microsoft SQL Server 2005技术内幕:T-SQL程序设计
Microsoft SQL Server 2005技术内幕:存储引擎
Microsoft SQL Server 2005技术内幕:查询、调整和优化
2.SQL2008
SQL Server 2008编程入门经典
SQL Server 2008高级程序设计
SQL Server 2008管理专家指南
这些都不错
1