折腾了我2天没午休的超级低挡难题,这样:(50分)

  • 主题发起人 主题发起人 oicu
  • 开始时间 开始时间
O

oicu

Unregistered / Unconfirmed
GUEST, unregistred user!
经过了巨艰苦的运算,关联了n 个表,终于Query输出以下形式:

单位性质 在职人数 退休人数 合计
A 123 11 134
B 110 9 119
C 11110 9 11119
D 12 11100 11112
E 0 119 119
F 3 2 5
G 22 20 42
H 1 1 2
I 120 0 120

但根据需求,要把 A、E、H、J 合为一类(就是A+E+H+J做一个 N0 类),B、D、G合为一类(就是B+D+G 做一个 N1 类),
C、F、I合为一类(就是C+F+I做一个 N2 类),最后总共合为3条记录,怎样简单的实现她(比如就在SQl语句中实现!),
俺就快不行了!5555
 
在此表里建个字段,用来做类型的标识了

比如建个这FLAG字段,类型为CHAR(0),在生成记录的时候这相同类型的记录填到
FLAG的时候呢填相同的值了

在用这GROUP BY来分类汇总
想问题的思路得开阔点,不能只想在一点上了
 
作一个在DataSet里先加入所有字段,然后再新增一个计算字段 Key
在Dataset的 OnClacluate 事件内加入
If Pos(单位性质,'A、E、H、J ') then
...Key.Value:='No';
If Pos(单位性质,B、D、G') then
...Key.Value:='No1';
.........
给Dataset 按 Key排序.
按在报表内按Key分组
或者你在查询时就加入该字段就可以了,试试吧.
 
那么怎样在查询的时候生成Flag 字段?又如何判断类型,,能给个例子么?!就在SQL语句中怎么做?非常谢谢。
 
建个临时表,又快又方便
Create Table #123
(flag int,
dwxz char(1),
zzrs int,
txrs int,
hjrs int
)
然后你的 SQL 语句前加上
insert into #123
Select 子句修改如下:
Select Null,单位性质 ,在职人数,退休人数,合计

update #123
set Flag = 1
where 单位性质 in ('A','E','H','J' )

update #123
set Flag = 2
where 单位性质 in ('b','d','G')

update #123
set Flag = 3
where 单位性质 in ('C','F','I' )

最后从 临时表中 汇总你不可能不会吧
Select Sum(zzrs),Sum(txrs),Sum(hjrs) from #123
group by Flag

怎么样,多用临时表,方便灵活,不必写太复杂的SQL语句
 
以下SQL语句可以,在MS SQL中
Select 单位性质,Sum(在职人数) 在职人数,Sum(退休人数) 退休人数,Sum(合计) 合计 From
(Select Case
When 单位性质 in (A,E,H,J) then '类型1'
When 单位性质 in (B,D,G) then '类型2'
When 单位性质 in (C,F,I) then '类型3'
Else
'类型其他'
End As 单位性质,在职人数,退休人数,合计
From Table1 ) As Table2 Group By 单位性质
 
我网速慢,才发现在人答了,我删!
 
to 笑傲江湖1976
可是那来Table 1、 2哦,再有是用 Oracle,情况可能不同哦!
 
oicu,人家的回答已经把思路给你了.至于你的sql查询具体是什么样子大家并不知道.
我的看法是你在你现在的查询外面再嵌一层,原来的sql查询作为子查询并多加一个字
段(就是case when部分)就行了.这样可能改动小一点,你也能接受,如下:

Select 单位性质2,Sum(在职人数) 在职人数,Sum(退休人数) 退休人数,Sum(合计) 合计
From
//子查询就是你原来的sql略作修改
(select 单位性质,sum(***) as 在职人数,sum(***) as 在职人数,Sum(退休人数) 退休人数,Sum(合计) 合计,
(Case
When 单位性质 in (A,E,H,J) then '类型1'
When 单位性质 in (B,D,G) then '类型2'
When 单位性质 in (C,F,I) then '类型3'
Else '类型其他'
End
) As 单位性质
from ........
group by 单位性质
) as lstable
//子查询就是你原来的sql略作修改
group by 单位性质2
 
非常感谢500分!
 
后退
顶部