数据集中的动态添加新行的问题!
现在有一个根据条件查询得到的数据集,在遍历该数据集在生成一个新的数据集,在新数据集中要动态的插入新行.
这个问题本来昨天我在SQL区发了贴.请大家看看这里能更好的理解我的需求.谢谢.
http://community.csdn.net/Expert/topic/5474/5474861.xml?temp=.3563349
paoluo(一天到晚游泳的鱼)
chuifengde(树上的鸟儿) 俩位朋友给了我一个SQL.不过个人技术菜没有理解好.目的也没有完全达到.所以我就又把之前的思路改了下.
现在我直接得到按月份查询的数据集,就是想根据RIV_NAME来分组了.
RIV_NAME Username RIV_NUM RIV2_EXAMINE RIV2_DATE
A 张山 71 杨行镇 2007-3-12 11:10:37
A 张山 83 杨行镇 2007-3-12 13:57:28
A 张山 77 杨行镇 2007-3-12 13:58:08
B 李四 91 杨行镇 2007-3-23 13:52:14
B 李四 80 月浦镇 2007-3-23 14:41:35
B 张山 73 杨行镇 2007-3-23 15:05:05
C 王五 90 杨行镇 2007-3-27 13:13:11
C 王五 94 杨行镇 2007-3-27 13:19:12
C 王五 92 杨行镇 2007-3-27 13:19:36
C 王五 95 杨行镇 2007-3-27 13:23:16
我想显示成
RIV_NAME NUM1 NUM2 NUM3 NUM4 AVG RIV2_EXAMINE RIV2_DATE
A 71 83 77 空 77 杨行镇 3月
B 91 80 73 空 81 杨行镇 3月
C 90 94 92 95 92 杨行镇 3月
现在我就是无法生成上面的结果.
请大家能给出具体的解决步骤.本人菜鸟.请大家帮忙了。 谢谢!
[解决办法]
--只需要修改一就可以得到你要的果
Create Table 表
(RIV_NAME Varchar(10),
Username Nvarchar(10),
RIV_NUM Int,
RIV2_EXAMINE Nvarchar(10),
RIV2_DATE DateTime)
Insert 表 Select 'A ', N '张山 ', 71, N '杨行镇 ', '2007-3-12 11:10:37 '
Union All Select 'A ', N '张山 ', 83, N '杨行镇 ', '2007-3-12 13:57:28 '
Union All Select 'A ', N '张山 ', 77, N '杨行镇 ', '2007-3-12 13:58:08 '
Union All Select 'B ', N '李四 ', 91, N '杨行镇 ', '2007-3-23 13:52:14 '
Union All Select 'B ', N '李四 ', 80, N '月浦镇 ', '2007-3-23 14:41:35 '
Union All Select 'B ', N '张山 ', 73, N '杨行镇 ', '2007-3-23 15:05:05 '
Union All Select 'C ', N '王五 ', 90, N '杨行镇 ', '2007-3-27 13:13:11 '
Union All Select 'C ', N '王五 ', 94, N '杨行镇 ', '2007-3-27 13:19:12 '
Union All Select 'C ', N '王五 ', 92, N '杨行镇 ', '2007-3-27 13:19:36 '
Union All Select 'C ', N '王五 ', 95, N '杨行镇 ', '2007-3-27 13:23:16 '
GO
Declare @S Varchar(8000)
Select @S = 'Select RIV_NAME '
Select @S = @S + ', Max(Case ID When ' + Rtrim(ID) + ' Then Rtrim(RIV_NUM) Else ' ' ' ' End) As [RIV_NUM ' + Rtrim(ID) + '] ' From
(Select (Select Count(*) From 表 Where RIV_NAME = A.RIV_NAME And RIV2_DATE <= A.RIV2_DATE And Month(RIV2_DATE) = 3) As ID, * From 表 A Where Month(RIV2_DATE) = 3) A Group By ID
Select @S = @S+ ' , AVG(RIV_NUM) As [AVG], Max(RIV2_EXAMINE) As RIV2_EXAMINE, DateName(mm, RIV2_DATE) As RIV2_DATE From (Select (Select Count(*) From 表 Where RIV_NAME = A.RIV_NAME And RIV2_DATE <= A.RIV2_DATE And Month(RIV2_DATE) = 3) As ID, * From 表 A Where Month(RIV2_DATE) = 3) A Where Month(RIV2_DATE) = 3 Group By RIV_NAME, DateName(mm, RIV2_DATE) ' --加上AVG
EXEC(@S)
GO
Drop Table 表
--Result
/*
RIV_NAMERIV_NUM1RIV_NUM2RIV_NUM3RIV_NUM4AVGRIV2_EXAMINERIV2_DATE
A71837777杨行镇三月
B91807381杨行镇三月
C9094929592杨行镇三月
*/