日期:2014-05-18  浏览次数:20624 次

分栏显示并排序且加小计与合计,请各位帮忙
create   table   #tt
(
    Item           varchar(10)   ,    
    Color         varchar(10)       ,
    QtySum       float      
  )        

select     *,id=identity(int,1,1)   into   #newtt   from   #tt

insert   #newtt
select     'Chair ',   'Blue ',50   union  
select     'Chair ',   'Blue ',40   union  
select     'Chair ',   'Blue ',60   union
select     'Chair ',   'Blue ',30   union  
select     'Chair ',   'Blue ',70   union  
select     'Chair1 ',   'RED ',30   union  
select     'Chair1 ',   'RED ',20   union  
select     'Chair1 ',   'RED ',40   union  
select     'Chair1 ',   'RED ',60

我要生成如下数据,不知如何生成,请指点.

item           color         qtysum       item1         color1       qtysum1
Chair Blue 50.0 Chair Blue 40.0
Chair Blue 60.0 Chair Blue 30.0
Chair Blue 70.0
Chair 小计 250.0 NULL NULL NULL
Chair1 RED 30.0       Chair1 RED 20.0
Chair1 RED 40.0       Chair1 RED           60.0    
Chair1     小计 150.0 NULL NULL NULL
vsum 合计 400.0 NULL NULL NULL

---由于数据是不定性的,在#newtt表中可能会有更多的数据,意味着color= 'red '的记录数(count)也可能为奇数,color= 'blue '的记录数也可能为偶数.生成最终数据模式是上述模式.
衷心谢谢各位!


------解决方案--------------------
这种分栏在水晶报表中可以做啊
------解决方案--------------------
create table #tt
(
Item varchar(10) ,
Color varchar(10) ,
QtySum float
)

select *,id=identity(int,1,1) into #newtt from #tt

insert #newtt select 'Chair ', 'Blue ',50
insert #newtt select 'Chair ', 'Blue ',40
insert #newtt select 'Chair ', 'Blue ',60
insert #newtt select 'Chair ', 'Blue ',30
insert #newtt select 'Chair ', 'Blue ',70
insert #newtt select 'Chair1 ', 'RED ',30
insert #newtt select 'Chair1 ', 'RED ',20
insert #newtt select 'Chair1 ', 'RED ',40
insert #newtt select 'Chair1 ', 'RED ',60

select *,idd=(select count(1) from #newtt where item=a.item and color=a.color and id <=a.id) into #ntt from #newtt a

select item,color,qtysum,idd into #zz from
(
select item,color,qtysum,idd from #ntt
union all
select *,idd=(select case when max(idd)%2=0 then max(idd)+1 else max(idd)+2 end from #ntt where item=aa.item) from(
select item,color, sum(qtysum) dd from #ntt group by item,color with rollup )
aa
where color is null
)bb
order by item,color,idd

select aa.item,isnull(aa.color, '小计 ') color,aa.qtysum,isnull(bb.item, ' ') item1,isnull(bb.color, ' ') color1,isnull(bb.qtysum, ' ') qtysum1 from
(select item,color,qtysum,idd from #zz where idd%2=1) aa
Left Join
(select item,color,qty