动态生成列举例

CSDN网友提出以下问题
————————————————————————————————
select fundcode,AccumulatedUnitNV,UnitNV,EndDate from MF_NetValue

fundcode AccumulatedUnitNV  UnitNV  EndDate
0200092.1740          1.28902007-08-23 00:00:00
6300011.3908          1.39082007-08-23 00:00:00
0200092.1920          1.30702007-08-24 00:00:00
6300011.4100          1.41002007-08-24 00:00:00

表结果就是这样得..不过数据有多条 .
比如有23号,24号两个时间..我想再一个数据里能把两个数据得时间显示在一条数据里..

0200092.1740  1.28902007-08-23 00:00:00 2.19201.30702007-08-24 00:00:00

这样得形式得到结果集..多个fundcode 噢….我觉得只有存储过程做得到..但是不会..大家帮帮忙.

-------------------------------------------
解答:
create table MF_NetValue(fundcode varchar(6),AccumulatedUnitNV decimal(18,4),UnitNV decimal(18,4),enddate datetime)
insert MF_NetValue
select ‘020009′,2.1740,1.2890,’2007-08-23 00:00:00′union all
select ‘630001′,1.3908,1.3908,’2007-08-23 00:00:00′union all
select ‘020009′,2.1920,1.3070,’2007-08-24 00:00:00′union all
select ‘630001′,1.4100,1.4100,’2007-08-24 00:00:00′

select * from MF_NetValue
declare @sql VARCHAR(8000)

DECLARE @StartDate DATETIME–查询开始日期
DECLARE @EndDate DATETIME–查询结束日期

DECLARE @tmpCondition VARCHAR(2000)
DECLARE @tmpsql VARCHAR(8000)
DECLARE @CurrDate DATETIME
DECLARE @tmpDate VARCHAR(10)

set @StartDate=’2007-08-23′
set @EndDate=’2007-08-25′

SET @tmpCondition =’Where enddate>=”’+CONVERT(VARCHAR(10),@StartDate,120) +”’ AND enddate<=”’+CONVERT(VARCHAR(10),@EndDate,120) +””
SET @tmpsql=”
SET @CurrDate = @StartDate
while @CurrDate <= @EndDate
begin
SET @tmpDate = Convert(varchar(10),@CurrDate,121)
select @tmpsql = @tmpsql + ‘, SUM(CASE WHEN Convert(varchar(10),enddate,121) = ”’+@tmpDate+”’ THEN AccumulatedUnitNV ELSE 0.00 END) AS ['+CONVERT(VARCHAR(10),@CurrDate,120)+'AccumulatedUnitNV]‘
+ ‘, SUM(CASE WHEN Convert(varchar(10),enddate,121) = ”’+@tmpDate+”’ THEN UnitNV ELSE 0 END) AS ['+CONVERT(VARCHAR(10),@CurrDate,120)+'UnitNV]‘

select @CurrDate = @CurrDate +1
end
SET @tmpsql= ‘Select fundcode ‘ +@tmpsql
+’ FROM MF_NetValue ‘
+ @tmpCondition
+’ GROUP BY fundcode’
PRINT @tmpsql
EXEC (@tmpsql)
drop table MF_NetValue

(4 行受影响)
fundcode AccumulatedUnitNV                       UnitNV                                  enddate
——– ————————————— ————————————— ———————–
020009   2.1740                                  1.2890                                  2007-08-23 00:00:00.000
630001   1.3908                                  1.3908                                  2007-08-23 00:00:00.000
020009   2.1920                                  1.3070                                  2007-08-24 00:00:00.000
630001   1.4100                                  1.4100                                  2007-08-24 00:00:00.000

(4 行受影响)

Select fundcode , SUM(CASE WHEN Convert(varchar(10),enddate,121) = ‘2007-08-23′ THEN AccumulatedUnitNV ELSE 0.00 END) AS [2007-08-23AccumulatedUnitNV], SUM(CASE WHEN Convert(varchar(10),enddate,121) = ‘2007-08-23′ THEN UnitNV ELSE 0 END) AS [2007-08-23UnitNV], SUM(CASE WHEN Convert(varchar(10),enddate,121) = ‘2007-08-24′ THEN AccumulatedUnitNV ELSE 0.00 END) AS [2007-08-24AccumulatedUnitNV], SUM(CASE WHEN Convert(varchar(10),enddate,121) = ‘2007-08-24′ THEN UnitNV ELSE 0 END) AS [2007-08-24UnitNV], SUM(CASE WHEN Convert(varchar(10),enddate,121) = ‘2007-08-25′ THEN AccumulatedUnitNV ELSE 0.00 END) AS [2007-08-25AccumulatedUnitNV], SUM(CASE WHEN Convert(varchar(10),enddate,121) = ‘2007-08-25′ THEN UnitNV ELSE 0 END) AS [2007-08-25UnitNV] FROM MF_NetValue Where enddate>=’2007-08-23′ AND enddate<=’2007-08-25′ GROUP BY fundcode
fundcode 2007-08-23AccumulatedUnitNV             2007-08-23UnitNV                        2007-08-24AccumulatedUnitNV             2007-08-24UnitNV                        2007-08-25AccumulatedUnitNV             2007-08-25UnitNV
——– ————————————— ————————————— ————————————— ————————————— ————————————— —————————————
020009   2.1740                                  1.2890                                  2.1920                                  1.3070                                  0.0000                                  0.0000
630001   1.3908                                  1.3908                                  1.4100                                  1.4100                                  0.0000                                  0.0000

(2 行受影响)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值