如果要指定是 : 1-771-574-21 的话,可以加上一条 Whereselect distinct HINCD ,Max(JSKSU) JSKSU,Min(JSKSU) JSKSU from 表 where HINCD = '1-771-574-21' group by HINCD
你们发现没有: 表temp里面本来就有两行1-771-574-21,9与1-771-574-21,8。我们用的语句: select a.hincd,a.jsksu,b.jsksu from ns a,ns b where a.hincd=b.hincd and a.hincd='1-771-574-21' 本身就会返回两行!你们的结果都不是我想要的结果,我想让同种编号的两种情况都反映在同一记录上!就是: 1-771-574-21,8,9 里面并不存在最大值与最小值的问题!
如果能确保每个HINCD都有两个则可以 select HINCD,sum(decode(MOD(rownum,2),1,jsksu,0)),sum(decode(MOD(rownum,2),0,jsksu,0)) from (SELECT * FROM ns ORDER BY HINCD) T where group by hincd; 试试看
如果能确保每个HINCD都有两个则可以 select HINCD,sum(decode(MOD(rownum,2),1,jsksu,0)),sum(decode(MOD(rownum,2),0,jsksu,0)) from (SELECT * FROM ns ORDER BY HINCD) T where group by hincd; 试试看 我例子里只有两条记录,其实里面有好几万条啊。你们的做法只是把两条记录合并,并没有判断只有相同代码(HINCD)才能合并,另外里面还有很多相同代码但情况不同的记录! 我要求相同代码的记录只出现一次,把它出现不同情况的数量显示在统一条记录上,如: HINCD NSRIYU JSKSU ---------------------------------- 1-771-574-21 13 9 1-333-333-01 11 8 1-444-444-01 11 6 1-444-444-01 13 6 1-771-574-21 11 8 1-333-333-01 13 4其中:NSRIYU表示“优”“差”,Jsksu表示数量。我想得到如下的结果: HINCD jsksu JSKSU ------------------------------ 1-771-574-21 9 8 1-333-333-01 8 4 1-444-444-01 6 6
SELECT HINCD ,SUM(DECODE (MODE(ROWNUM,2),1,H1,0)) ,SUM(DECODE (MODE(ROWNUM,2),1,H2,0)) FROM ( select HINCD JSKSU H1,JSKSU H2 FROM ns ORDER BY JSKSU )AS T GROUP BY JSKSU
to haif1978(Hello):你的方法管用,能解释一下MOD和DECODE的意思和使用方法吗?我没用过!
你的结果不是我要的那种,我的意思是:9是优的数量;8是差的数量。我要他显示在同一行!其实表里还有一个字段(nsrisu)是表示是”优“还是”差“。
-------------------- ---------- ----------
1-771-574-21 13 9
1-771-574-21 0 8现在我想select出来如下:(相同代码的在同一行)HINCD JSKSU JSKSU
-------------------- ---------- ----------
1-771-574-21 9 8
========================================================
select distinct HINCD ,Max(JSKSU) JSKSU,Min(JSKSU) JSKSU from 表 group by HINCD
from 表
where HINCD = '1-771-574-21'
group by HINCD
表temp里面本来就有两行1-771-574-21,9与1-771-574-21,8。我们用的语句:
select a.hincd,a.jsksu,b.jsksu from ns a,ns b where a.hincd=b.hincd and a.hincd='1-771-574-21'
本身就会返回两行!你们的结果都不是我想要的结果,我想让同种编号的两种情况都反映在同一记录上!就是:
1-771-574-21,8,9
里面并不存在最大值与最小值的问题!
bzszp的答案中sum(decode(rownum,2,0,jsksu)) 应该改成sum(decode(rownum,2,jsksu,0))吧
select HINCD,sum(decode(rownum,1,jsksu,0)),sum(decode(rownum,2,jsksu,0)) from ns where a.hincd='1-771-574-21' group by hincd;
ok!
我例子里只有两条记录,其实里面有好几万条啊。你们的做法只是把两条记录合并,并没有判断只有相同代码(HINCD)才能合并,另外里面还有很多相同代码但情况不同的记录!
我要求相同代码的记录只出现一次,把它出现不同情况的数量显示在统一条记录上,如:
HINCD NSRIYU JSKSU
----------------------------------
1-771-574-21 13 9
1-333-333-01 11 8
1-444-444-01 11 6
1-444-444-01 13 6
1-771-574-21 11 8
1-333-333-01 13 4其中:NSRIYU表示“优”“差”,Jsksu表示数量。我想得到如下的结果:
HINCD jsksu JSKSU
------------------------------
1-771-574-21 9 8
1-333-333-01 8 4
1-444-444-01 6 6
select HINCD,sum(decode(MOD(rownum,2),1,jsksu,0)),sum(decode(MOD(rownum,2),0,jsksu,0)) from (SELECT * FROM ns ORDER BY HINCD) T where group by hincd;
试试看
select HINCD,sum(decode(MOD(rownum,2),1,jsksu,0)),sum(decode(MOD(rownum,2),0,jsksu,0)) from (SELECT * FROM ns ORDER BY HINCD) T where group by hincd;
试试看
我例子里只有两条记录,其实里面有好几万条啊。你们的做法只是把两条记录合并,并没有判断只有相同代码(HINCD)才能合并,另外里面还有很多相同代码但情况不同的记录!
我要求相同代码的记录只出现一次,把它出现不同情况的数量显示在统一条记录上,如:
HINCD NSRIYU JSKSU
----------------------------------
1-771-574-21 13 9
1-333-333-01 11 8
1-444-444-01 11 6
1-444-444-01 13 6
1-771-574-21 11 8
1-333-333-01 13 4其中:NSRIYU表示“优”“差”,Jsksu表示数量。我想得到如下的结果:
HINCD jsksu JSKSU
------------------------------
1-771-574-21 9 8
1-333-333-01 8 4
1-444-444-01 6 6
----------------------------------
1-771-574-21 13 9
1-333-333-01 11 8
1-771-574-21 10 9 //多了一行
1-444-444-01 11 6
1-444-444-01 13 6
1-771-574-21 11 8
1-333-333-01 13 4
现在想让nsriyu为11,13的数量加在一起放在第一个nsriyu里,nsriyu为10的数量放在第二个nsriyu里。如:HINCD jsksu JSKSU
----------------------------------
1-771-574-21 17 9
1-333-333-01 12 空这样是不是很难实现?
你的语句能查询出来,但中间会隔一行。很难保证是两行,有的只有一行!有的多于三行
如:
HINCD NSRIYU JSKSU
----------------------------------
1-771-574-21 13 9
1-333-333-01 11 8
1-771-574-21 10 9 //多了一行
1-444-444-01 11 6
1-444-444-01 13 6
1-771-574-21 11 8
1-333-333-01 13 4
现在想让nsriyu为11,13的数量加在一起放在第一个nsriyu里,nsriyu为10的数量放在第二个nsriyu里。如:HINCD jsksu JSKSU
----------------------------------
1-771-574-21 17 9
1-333-333-01 12 空
这样是不是很难实现?
行数不能确定是两行,可能是一行,可能是很多行!
FROM (
select HINCD JSKSU H1,JSKSU H2 FROM ns ORDER BY JSKSU )AS T
GROUP BY JSKSU
----------------------------------
1-771-574-21 13 9
1-333-333-01 11 8
1-771-574-21 10 9
1-771-574-21 11 8
1-333-333-01 13 4其实,13,11分别代表优秀、良,我把他放在一起是为了统一作为“好”处理,10、9分别代表较差,差握,我把他放在一起是为了统一作为“差”处理,我想要的结果:HINCD jsksu JSKSU
----------------------------------
1-771-574-21 17 9
1-333-333-01 12 jsksu是13、11的总和,JSKSU是10的总和。
相同代码不能出现两次。