高手请进!答对的送分30!

GSdeng 2003-10-20 03:38:01
我有如下的一张表:

HINCD NSRIYU JSKSU
-------------------- ---------- ----------
1-771-574-21 13 9
1-771-574-21 0 8

现在我想select出来如下:(相同代码的在同一行)

HINCD JSKSU JSKSU
-------------------- ---------- ----------
1-771-574-21 9 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'

得出的结果如下:

HINCD JSKSU JSKSU
-------------------- ---------- ----------
1-771-574-21 9 9
1-771-574-21 8 9
1-771-574-21 9 8
1-771-574-21 8 8
为什么会多出三行?
如果要得到我想要得结果,应该怎么做?

...全文
35 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
haif1978 2003-10-21
  • 打赏
  • 举报
回复
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

GSdeng 2003-10-21
  • 打赏
  • 举报
回复
To beckhambobo(beckham):
行数不能确定是两行,可能是一行,可能是很多行!
GSdeng 2003-10-21
  • 打赏
  • 举报
回复
更正如下:
你的语句能查询出来,但中间会隔一行。很难保证是两行,有的只有一行!有的多于三行
如:
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 空
这样是不是很难实现?
GSdeng 2003-10-21
  • 打赏
  • 举报
回复
很难保证,有的只有一行!有的多于三行,你的语句能查询出来,但中间会隔一行!如:

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 空

这样是不是很难实现?
beckhambobo 2003-10-21
  • 打赏
  • 举报
回复
楼主没说明白,相同记当是否统一只有两条,若有相同记录出现三条以上(是否有这种情形出现)
albberk 2003-10-21
  • 打赏
  • 举报
回复
如果能确保每个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
bzszp 2003-10-21
  • 打赏
  • 举报
回复
如果能确保每个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;
试试看
GSdeng 2003-10-21
  • 打赏
  • 举报
回复
楼上:
我例子里只有两条记录,其实里面有好几万条啊。你们的做法只是把两条记录合并,并没有判断只有相同代码(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
bzszp 2003-10-21
  • 打赏
  • 举报
回复
呵呵,楼上发现了
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!
mosaic 2003-10-21
  • 打赏
  • 举报
回复
这应该纵表变横表的问题了。
bzszp的答案中sum(decode(rownum,2,0,jsksu)) 应该改成sum(decode(rownum,2,jsksu,0))吧
GSdeng 2003-10-21
  • 打赏
  • 举报
回复
你们发现没有:
表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
里面并不存在最大值与最小值的问题!
GSdeng 2003-10-21
  • 打赏
  • 举报
回复
HINCD NSRIYU 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的总和。
相同代码不能出现两次。
GSdeng 2003-10-21
  • 打赏
  • 举报
回复
其实,13,11分别代表优秀、良,我把他放在一起是为了统一作为“好”处理,10、9分别代表较差,差握,我把他放在一起是为了统一作为“差”处理。

我试过上面所有的方法,最终还是不行!
beckhambobo 2003-10-21
  • 打赏
  • 举报
回复
让nsriyu为11,13的数量加在一起放在第一个nsriyu里,nsriyu为10的数量放在第二个nsriyu里??

楼主这种想法按什么规律?
GSdeng 2003-10-21
  • 打赏
  • 举报
回复
to haif1978(Hello):

你的方法管用,能解释一下MOD和DECODE的意思和使用方法吗?我没用过!
chanet 2003-10-20
  • 打赏
  • 举报
回复
如果要指定是 : 1-771-574-21 的话,可以加上一条 Where

select distinct HINCD ,Max(JSKSU) JSKSU,Min(JSKSU) JSKSU
from 表
where HINCD = '1-771-574-21'
group by HINCD
chanet 2003-10-20
  • 打赏
  • 举报
回复
HINCD NSRIYU JSKSU
-------------------- ---------- ----------
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
良朋 2003-10-20
  • 打赏
  • 举报
回复
select HINCD,JSKSU as jsksu_1,JSKSU as jsksu_2 where hincd='1-771-574-21'
GSdeng 2003-10-20
  • 打赏
  • 举报
回复
to bzszp(SongZip):
你的结果不是我要的那种,我的意思是:9是优的数量;8是差的数量。我要他显示在同一行!其实表里还有一个字段(nsrisu)是表示是”优“还是”差“。
hdkkk 2003-10-20
  • 打赏
  • 举报
回复
楼上的不错
加载更多回复(1)

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧