A表如下:
JH DBJH1 LTCH1 LTLB1 DBJH2 LTCH2 LTLB2 ..... DBJH8 LTCH8 LTLB8
QKFLiUjDyG 7qY170vJba 21 G 1b6XwlKMTx 21 G
QKFLiUjDyG 7qY170vJba 22 G 1b6XwlKMTx 22 G
QKFLiUjDyG 7qY170vJba 3 G 1b6XwlKMTx 3 G
QKFLiUjDyG 7qY170vJba 41 G 1b6XwlKMTx N
QKFLiUjDyG 7qY170vJba 0 1b6XwlKMTx N
QKFLiUjDyG 7qY170vJba 42 G 1b6XwlKMTx 42 G
B8hhWM7oP5 faUZLi3ccf 0 BgHyOtaWUn 21 G
B8hhWM7oP5 faUZLi3ccf 0 BgHyOtaWUn 0
B8hhWM7oP5 faUZLi3ccf N BgHyOtaWUn 41*1 G
B8hhWM7oP5 faUZLi3ccf 0 BgHyOtaWUn 42 G
B8hhWM7oP5 faUZLi3ccf 0 BgHyOtaWUn 43
上表中按JH和DBJH1、DBJH2、DBJH3......DBJH8 分组 。
对于JH字段中的每种元素例如“QKFLiUjDyG”的8个DBJH列(DBJH1、DBJH2、DBJH3......DBJH8) 进行求COUNT操作。以DBJH1列为例,我现在的做法如下:
1、对LTCH1列求Count 。条件:所有非0和非‘N’的记录
(select JH,DBJH1,count(LTCH1) LTCH1_CNT from A where LTCH1 <> '0' AND LTCH1 <> 'N') p12、对LTLB1列求Count 。条件:内容为‘G’的记录
(select JH,DBJH1,count(LTLB1) LTLB1_CNT from A where LTLB1 = 'G') p2 3、将上面2个子查询关联。如果LTCH1_CNT > 0 AND LTCH1_CNT <> LTLB1_CNT,则DBJH1的内容为空
select p1.jh,
case when ltch1_cnt > 0 and ltch1_cnt<>ltlb1_cnt then p1.dbjh1 else '' end dbjh1
from p1 left join p2 where p1.jh = p2.jh 问题是现在有8个DBJH列都需要做上面的判断。
如果按照我上面的方法,就需要将8个JBJH的子查询在全部关联起来,SQL非常麻烦。
请教大家有没有别的好方法呢?
JH DBJH1 LTCH1 LTLB1 DBJH2 LTCH2 LTLB2 ..... DBJH8 LTCH8 LTLB8
QKFLiUjDyG 7qY170vJba 21 G 1b6XwlKMTx 21 G
QKFLiUjDyG 7qY170vJba 22 G 1b6XwlKMTx 22 G
QKFLiUjDyG 7qY170vJba 3 G 1b6XwlKMTx 3 G
QKFLiUjDyG 7qY170vJba 41 G 1b6XwlKMTx N
QKFLiUjDyG 7qY170vJba 0 1b6XwlKMTx N
QKFLiUjDyG 7qY170vJba 42 G 1b6XwlKMTx 42 G
B8hhWM7oP5 faUZLi3ccf 0 BgHyOtaWUn 21 G
B8hhWM7oP5 faUZLi3ccf 0 BgHyOtaWUn 0
B8hhWM7oP5 faUZLi3ccf N BgHyOtaWUn 41*1 G
B8hhWM7oP5 faUZLi3ccf 0 BgHyOtaWUn 42 G
B8hhWM7oP5 faUZLi3ccf 0 BgHyOtaWUn 43
上表中按JH和DBJH1、DBJH2、DBJH3......DBJH8 分组 。
对于JH字段中的每种元素例如“QKFLiUjDyG”的8个DBJH列(DBJH1、DBJH2、DBJH3......DBJH8) 进行求COUNT操作。以DBJH1列为例,我现在的做法如下:
1、对LTCH1列求Count 。条件:所有非0和非‘N’的记录
(select JH,DBJH1,count(LTCH1) LTCH1_CNT from A where LTCH1 <> '0' AND LTCH1 <> 'N') p12、对LTLB1列求Count 。条件:内容为‘G’的记录
(select JH,DBJH1,count(LTLB1) LTLB1_CNT from A where LTLB1 = 'G') p2 3、将上面2个子查询关联。如果LTCH1_CNT > 0 AND LTCH1_CNT <> LTLB1_CNT,则DBJH1的内容为空
select p1.jh,
case when ltch1_cnt > 0 and ltch1_cnt<>ltlb1_cnt then p1.dbjh1 else '' end dbjh1
from p1 left join p2 where p1.jh = p2.jh 问题是现在有8个DBJH列都需要做上面的判断。
如果按照我上面的方法,就需要将8个JBJH的子查询在全部关联起来,SQL非常麻烦。
请教大家有没有别的好方法呢?
解决方案 »
- varchar2长度定义的问题
- 安装oracle9i后怎么少了oracleServicexxx服务,怎么办啊,我安装顺序装了啊,怎么会少呢?
- oracle表中数据为什么会自动恢复
- [斑竹手下留情,借宝地问个C#调用oracle过程的问题]C#中能调用oracle传入参数pl/sql
- ora-03113:通信通道的文件结束
- 高分求面试题
- oracle的SQL语句出错.谁帮我看看
- MySql中limit 是控制范围输出结果,请问在oracle中有吗??
- 怎么修改表的某字段名?
- oracle Bundle Patch p13928776_10204 Windows修复教程
- 急急急!!!!!在线等!.net平台C#开发,数据库为Oracle 10g,程序操作成功,却不定时总报各种各样的错误。
- !!!!! 求 oracle11g RAC相关知识的中文资料^^^^^^^^^
JH DBJH1 LTCH1 LTLB1 DBJH2 LTCH2 LTLB2 ........
QKFLiUjDyG 7qY170vJba 21 G 1b6XwlKMTx 21 G
QKFLiUjDyG 7qY170vJba 22 1b6XwlKMTx 22 G
QKFLiUjDyG 7qY170vJba N 1b6XwlKMTx 3 G
QKFLiUjDyG 7qY170vJba 41 G 1b6XwlKMTx N
QKFLiUjDyG 7qY170vJba 0 1b6XwlKMTx N
QKFLiUjDyG 7qY170vJba 42 G 1b6XwlKMTx 42 G
B8hhWM7oP5 faUZLi3ccf 0 BgHyOtaWUn 21
B8hhWM7oP5 faUZLi3ccf 0 BgHyOtaWUn 0
B8hhWM7oP5 faUZLi3ccf N BgHyOtaWUn 41*1 G
B8hhWM7oP5 faUZLi3ccf 0 BgHyOtaWUn 42
B8hhWM7oP5 faUZLi3ccf 0 BgHyOtaWUn 43
CASE WHEN SUM(DECODE(LTCH1,'0',0,'N',0,1)) > 0 AND SUM(DECODE(LTLB1,'G',1,0))-SUM(DECODE(LTCH1,'0',0,'N',0,1)) <>0 THEN DBJH1 ELSE NULL END DBJH1
FROM A
GROUP BY JH;
还是分别按jh,dbjh1/jh,dbjh2/jh,dbjh3。分组
结果查询的结构如下:DBJH列不为空的,就是判断中满足条件的。为空的就是判断中不满足条件的。
JH DBJH1 DBJH2 DBJH3 ..........
QKFLiUjDyG 7qY170vJba 1b6XwlKMTx
B8hhWM7oP5 BgHyOtaWUn
CASE WHEN SUM(DECODE(LTCH1,'0',0,'N',0,1)) > 0 AND SUM(DECODE(LTLB1,'G',1,0))-SUM(DECODE(LTCH1,'0',0,'N',0,1)) <>0 THEN MAX(DBJH1) ELSE NULL END DBJH1,
CASE WHEN SUM(DECODE(LTCH2,'0',0,'N',0,1)) > 0 AND SUM(DECODE(LTLB2,'G',1,0))-SUM(DECODE(LTCH1,'0',0,'N',0,1)) <>0 THEN MAX(DBJH1) ELSE NULL END DBJH2,
...
FROM A
GROUP BY JH;我的不能用?
SELECT JH,
CASE WHEN SUM(DECODE(LTCH1,'0',0,'N',0,1)) > 0 AND SUM(DECODE(LTLB1,'G',1,0))-SUM(DECODE(LTCH1,'0',0,'N',0,1)) <>0 THEN DBJH1 ELSE NULL END DBJH1,
CASE WHEN SUM(DECODE(LTCH2,'0',0,'N',0,1)) > 0 AND SUM(DECODE(LTLB2,'G',1,0))-SUM(DECODE(LTCH2,'0',0,'N',0,1)) <>0 THEN DBJH2 ELSE NULL END DBJH2,
...
FROM A
GROUP BY JH,DBJH1,DBJH2,DBJH3...DBJH8;