Oracle SQL 查询问题,去掉或者替换相同列中的重复值,两个表的查询。

Jesam32421 2011-10-02 10:30:09
有俩表:Question 和Option
Question:
QuestionID QuestionName

Option:
OptionID OptionName QuestionID

现在我用Select Question.QuestionName QN, Option.OptionName ON from Question, Option where QuestionID=1 and Question.QuestionID=Option.QuestionID, 这样就列出了

QN ON
q1 25
q1 28
q1 32
q1 95
q1 85

我的问题是:我只需要显示第一个q1 ,其他四个q1都要求看不到。请问如何可以做到?在线等,多谢各位大虾了, 40小分不成敬意:)
...全文
427 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mailking 2011-10-03
  • 打赏
  • 举报
回复
多条数据的话也可以用SQL达到目的
不过要修改代码改用分析函数了

select decode(rn,1,QN,null) QN,t.ON
from
(
Select Question.QuestionName QN,
Option.OptionName ON,
number()over(order by Question.QuestionName parttion by Question.QuestionName) as rn
from Question a,
Option b
where a.QuestionID = b.QuestionID
) t

Jesam32421 2011-10-03
  • 打赏
  • 举报
回复
如果Oracle真没有这种能力的话,俺只有试着在其他环节处理数据了 :(
Jesam32421 2011-10-03
  • 打赏
  • 举报
回复
这样确实可以把第一行的q1保留,但如果不止一个问题肿么办:
QN ON
q1 25
28
32
95
85
q2 12
35
14
78
34
Jesam32421 2011-10-03
  • 打赏
  • 举报
回复
结贴吧,大家辛苦啦!看来只有在JSP上处理数据了
mailking 2011-10-02
  • 打赏
  • 举报
回复

select decode(rn,1,QN,null) QN,t.ON
from
(
Select Question.QuestionName QN,
Option.OptionName ON,
rownum as rn
from Question a,
Option b
where a.QuestionID = b.QuestionID
and a.QuestionID=1
) t

QN ON
-- --
q1 25
28
32
95
85


这不就是你要的答案么!!不过这种排版问题都是放到应用程序里面来处理的
Jesam32421 2011-10-02
  • 打赏
  • 举报
回复
纠结。虽然是个小问题,但是困扰我两天了。我把分追加到100,如果能在数据库层面解决最好。不然传到JSP页面,又出现新问题。
NLP爱好者 2011-10-02
  • 打赏
  • 举报
回复
楼主可以看看这个例子,看看对你有没有帮助

<html>
<head>
<title>llll</title>
</head>
<body>

<div id="aa"></div>
<h3>请输入要输入的表格的列数和行数:</h3>
行:<input type=text name="text1">
<br>
列:<input type=text name="text2">
<input type="button" value="提交" onclick="createtable()">

<h3>请输入两个数字</h3>
<h3>合并单元格:</h3>
从<input type=text name="text3">行 <input type=text name="text4">列开始
<br>
合并<input type=text name="text5">行 <input type=text name="text6">列
<br>
<input type="button" value="合并" onclick="changetable()">
<script>
var i,j,tmp,l,r;
function createtable()
{
tmp="<table border=1 width=5% id = aaa>"
l=document.all.text1.value;
r=document.all.text2.value;

for(j=0;j<l;j++)
{
tmp=tmp+"<tr>"
for(i=0;i<r;i++)
{

tmp=tmp+"<td>"
tmp=tmp+"USE"
tmp=tmp+"</td>"

}
tmp=tmp+"</tr>"
}
tmp=tmp+"</table>"
aa.innerHTML=tmp

}

function changetable(){
var tab = document.all.aaa;
if(tab){
l=document.all.text3.value;
r=document.all.text4.value;
var obj = document.all.aaa.childNodes(0).childNodes(l-1).childNodes(r-1);
row=document.all.text5.value;
col=document.all.text6.value;
with(obj){
colSpan = col;
rowSpan = row;
}
var tbody = document.all.aaa.childNodes(0);
if(col>1){
obj.nextSibling.removeNode();
}
for (var m = 0; m <row-1 ; m++)
{
for (var n = 0; n < col; n++ )
{
indexRow = eval(m+"+"+l);
indexCol = eval(n+"+"+r+"-"+"1");
tbody.childNodes(indexRow).childNodes(indexCol).removeNode();
}
}
}else{
alert("no table");
}
}

</script>
</body>
</html>



mailking 2011-10-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mailking 的回复:]
SQL code

select decode(rn,1,QN,
null) QN
t.ON
from
(
Select Question.QuestionName QN,
Option.OptionName ON,
……
[/Quote]

select decode(rn,1,QN,null) QN,t.ON
from
(
Select Question.QuestionName QN,
Option.OptionName ON,
rownum as rn
from Question a,
Option b
where a.QuestionID = b.QuestionID
and a.QuestionID=1
) t

回得太急了,修正下
mailking 2011-10-02
  • 打赏
  • 举报
回复

select decode(rn,1,QN,
null) QN
t.ON
from
(
Select Question.QuestionName QN,
Option.OptionName ON,
rownum as rn
from Question a,
Option b
where a.QuestionID = b.QuestionID
and a.QuestionID=1
) t
where

这样的吧
Jesam32421 2011-10-02
  • 打赏
  • 举报
回复
能给个单元格的简单例子吗?单元格我试了,也不太会。就卡在这里了。多谢了。
NLP爱好者 2011-10-02
  • 打赏
  • 举报
回复
楼主可以将讲结果传到 jsp页面的表格中

然后 合并表格中的单元格 不就行了么?

NLP爱好者 2011-10-02
  • 打赏
  • 举报
回复
建议楼主使用这个函数吧
结果更加直观

select t.QN
wmsys.wm_concat(t.ON) as ON
from
(
Select Question.QuestionName QN,
Option.OptionName ON
from Question a,
Option b
where a.QuestionID = b.QuestionID
and a.QuestionID=1
) t
group by t.QN;



Jesam32421 2011-10-02
  • 打赏
  • 举报
回复
如果这样的结果不可能,那麻烦就大了。我想把这个结果通过MVC传到JSP页面打印出来,总不可能如果该问题有5个选项,我就得把该问题打印5次吧。我只想打印1次问题,然后打印5个选项。
NLP爱好者 2011-10-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lkz2004 的回复:]
楼主的意思不明确啊
是要查询结果的第一行 ? 还是要指定的结果行 比如:只需要查询结果中"ON=25"的记录中的第一行
[/Quote]

这样的结果是不可能的
只能是这样子

QN ON
q1 25,28,32,95,85
或者
QN ON
q1 25,28,32,95,85

NLP爱好者 2011-10-02
  • 打赏
  • 举报
回复
不知这样是否是楼主的意思?



select t.QN,
t.ON
from
(
Select Question.QuestionName QN,
Option.OptionName ON,
rownum as rn
from Question a,
Option b
where a.QuestionID = b.QuestionID
and a.QuestionID=1
) t
where t.rn = 1
Jesam32421 2011-10-02
  • 打赏
  • 举报
回复
不好意思。

我要求结果是:
QN ON
q1 25
28
32
95
85
NLP爱好者 2011-10-02
  • 打赏
  • 举报
回复
楼主的意思不明确啊
是要查询结果的第一行 ? 还是要指定的结果行 比如:只需要查询结果中"ON=25"的记录中的第一行

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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