急急急急急急急急急急急急急急急急!!!!考勤查询问题

gz5182009 2015-04-15 04:21:17
我现在有个表格式如下:
姓名 日期 出勤
张三 2015-4-1 1
张三 2015-4-2 0.5
张三 2015-4-3 1
.....
我现在想要这样的表格:
姓名 2015-4-1 2015-4-2 2015-4-3 ....
张三 1 0.5 1

请高手解答
...全文
189 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
江南小鱼 2015-04-15
  • 打赏
  • 举报
回复

with 表1(姓名,日期,出勤) as(
select '张三','2015-04-01','1'
union all
select '张三','2015-04-02','0.5'
union all
select '张三','2015-04-03','1.5'
)
select * from 表1
pivot(max(出勤) for 日期 in([2015-04-01],[2015-04-02],[2015-04-03])) t
还在加载中灬 2015-04-15
  • 打赏
  • 举报
回复
--动态
DECLARE @SQL VARCHAR(8000)--SQL2005+可以用VARCHAR(MAX)代替
SET @SQL='SELECT 姓名'
SELECT @SQL=@SQL+',ISNULL(SUM(CASE WHEN 日期='''+CONVERT(VARCHAR(10),日期,120)+''' THEN 出勤 END),0)['+CONVERT(VARCHAR(10),日期,120)+']'
FROM TB GROUP BY 日期
SET @SQL=@SQL+'FROM TB GROUP BY 姓名'
PRINT @SQL
EXEC(@SQL)
--静态
SELECT 姓名
	,ISNULL(SUM(CASE WHEN 日期='2015-4-1' THEN 出勤 END),0)[2015-4-1]
	,ISNULL(SUM(CASE WHEN 日期='2015-4-2' THEN 出勤 END),0)[2015-4-2]
	,ISNULL(SUM(CASE WHEN 日期='2015-4-3' THEN 出勤 END),0)[2015-4-3]
FROM TB GROUP BY 姓名

34,590

社区成员

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

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