首页 新闻 会员 周边 捐助

求一个 sql2005语句!高手请进!问题解决再追加分数!

0
悬赏园豆:30 [已解决问题] 解决于 2012-10-26 14:15

有这样一张表,

名字          日期               任务下发   任务完成

张三    2012-09-01             20             15

李四    2012-09-02             30             20

张三    2012-09-02             30             19

李四    2012-09-03             30             28

 

我想让他变成这样

          2012-09-01发  2012-09-01完成  2012-09-02发  2012-09-02完成 

张三        20                      15                          30                   19

李四         0                        0                           30                   20

2012-09-03 我就不写了  求高手写个完整的sql语句!

有理想的人的主页 有理想的人 | 初学一级 | 园豆:5
提问于:2012-09-13 14:12
< >
分享
最佳答案
1

花费了我一个多小时的结果,望采纳哈哈,代码如下,可能有空格是中文状态下的,你多多留意。

GO

CREATE TABLE [dbo].[Users]

([UserName] [nvarchar](20) NULL,  [SDate] [date] NULL,  

[GetTask] [int] NULL,  [FnishTask] [int] NULL ) ON [PRIMARY]

GO

INSERT [dbo].[Users] ([UserName], [SDate], [GetTask], [FnishTask])

VALUES (N'张三', CAST(0x1A360B00 AS Date), 20, 15)

INSERT [dbo].[Users] ([UserName], [SDate], [GetTask], [FnishTask])

VALUES (N'李四', CAST(0x1A360B00 AS Date), 20, 16)

INSERT [dbo].[Users] ([UserName], [SDate], [GetTask], [FnishTask])

VALUES (N'张三', CAST(0x1B360B00 AS Date), 25, 23)

INSERT [dbo].[Users] ([UserName], [SDate], [GetTask], [FnishTask])

VALUES (N'李四', CAST(0x1B360B00 AS Date), 25, 20)

INSERT [dbo].[Users] ([UserName], [SDate], [GetTask], [FnishTask])

VALUES (N'张三', CAST(0x1C360B00 AS Date), 23, 23)

INSERT [dbo].[Users] ([UserName], [SDate], [GetTask], [FnishTask])

VALUES (N'李四', CAST(0x1C360B00 AS Date), 23, 20)

GO

CREATE TABLE #tempUser(UserName NVARCHAR(20))

INSERT INTO #tempUser(UserName) SELECT DISTINCT(u.UserName) FROM Users u;

CREATE TABLE #tempDate (id INT IDENTITY(1,1),tDate date)

INSERT INTO #tempDate(tDate) SELECT DISTINCT(u.SDate) FROM Users u

DECLARE @dateCounts INT;

SELECT @dateCounts = COUNT(1) FROM #tempDate;

DECLARE @startCounts INT;

SET @startCounts = 1;

WHILE(@startCounts<=@dateCounts)

BEGIN  

DECLARE @tempColumnName NVARCHAR(20);

SELECT @tempColumnName=Convert(nvarchar(20),td.tDate) FROM #tempDate td WHERE td.id=@startCounts;  

EXECUTE('ALTER TABLE #tempUser ADD ['+@tempColumnName+'发' +'] NVARCHAR(20)')  

EXECUTE('ALTER TABLE #tempUser ADD ['+@tempColumnName+'完成' +'] NVARCHAR(20)')      

EXECUTE('UPDATE #tempUser  SET ['+@tempColumnName+'发' +'] = u.GetTask,  ['+@tempColumnName+'完成' +'] = u.FnishTask  

FROM #tempUser t  

INNER JOIN Users u ON t.UserName=u.UserName  

INNER JOIN #tempDate td ON u.SDate=td.tDate  

WHERE td.id='+@startCounts);    

SET @startCounts = @startCounts+1;

END

SELECT * FROM #tempUser tu;

DROP TABLE #tempUser;

DROP TABLE #tempDate;

SELECT * FROM Users u;

 

/**我跑的结果是这样的,希望你的也是,呵呵。

收获园豆:30
sharplizhi | 菜鸟二级 |园豆:366 | 2012-09-13 23:36

虽然没看明白什么意思 但是问题解决了  呵呵 !  如果有时间顺便给我讲讲啊!  多谢兄台!

有理想的人 | 园豆:5 (初学一级) | 2012-10-26 14:16
其他回答(5)
0

行转列 pivot

哇~怪兽 | 园豆:622 (小虾三级) | 2012-09-13 14:16

嗯  我用过 行转列  但是效果是这样的 

支持(0) 反对(0) 有理想的人 | 园豆:5 (初学一级) | 2012-09-13 15:23
0

楼上正解啊!!

比较白话的解释 ,请参考

http://www.cnblogs.com/zhangzt/archive/2010/07/29/1787825.html

二十三号同学 | 园豆:974 (小虾三级) | 2012-09-13 14:53
0

转置 ,我觉得pivot函数建议不用,因为这个函数在SQL 2000中无法使用,很多公司还是SQL 2000,建议 http://topic.csdn.net/u/20120327/20/abf68d17-eb19-4ad9-aebb-b4aa9bc2b5ee.html

zhengyingcan | 园豆:12 (初学一级) | 2012-09-13 18:55
0

最近也遇到这个问题 先前是用sql xml 的一个转换方法来解决的

后来同事用了一个左连接也轻松解决了  改天贴代码你额

yj_smile | 园豆:228 (菜鸟二级) | 2012-09-13 22:35
0

select *
into #temp_aa
from(
 select 名字 as Name,日期+'发' as  rq,任务下发 as num
 from A
 union all
 select 名字 as Name,日期+'完成' as  rq,任务完成 as num
 from A
) b

declare @aa nvarchar(2000)
set @aa=' select Name, '

select @aa = @aa + ' sum( case rq when  '''+rq+''' then num else null end ) as  '''+rq+''' ,'
from (select distinct rq from #temp_aa)   a

select @aa = left(@aa,len(@aa)-1) + ' from #temp_aa group by Name      '

exec(@aa)

 

多给点分啊

cobby | 园豆:211 (菜鸟二级) | 2012-09-19 17:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册