请教,如何查询同字段的不同值?(暂定)

[复制链接]
查看11 | 回复9 | 2007-4-25 04:02:08 | 显示全部楼层 |阅读模式
如何把同字段的多个不同值条件,通过一个语句一次查询获取呢?
比如:
有一个表Table,
有字段A、B、C、D
值a1 b1 c11
a2 b2 c25
a2 b2 c34
a3 b1 c13
请问,如何查询C字段,不同条件的D值呢?同时还需要得到查询的C值。
--------
是用JSP做的小东西,最后的结果就是想要在JSP里面用表格显示成这样就行:
A BC
a1b1c1

1(D值)
a2b2c2c3

54
a3b1c1

3
其中数据表中A、B、D的值都不是固定的,C的值有很多项。
[ 本帖最后由 sata01 于 2010-5-5 14:45 编辑 ]
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
group by c 试试。
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
你想干嘛?
distinct c,d???
or
where c='...'
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
select * fromtable1 where c in (select d from table1 where ......)?????????????
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
我用JSP做的小东西,最后的结果就是想要在JSP里面用表格显示成这样就行:
A B C
a1b1c1

1(D值)
a2b2c2c3

54
a3b1c1

3
其中数据表中A的值、B、D的值都不是固定的,C的值有很多项。
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
原帖由 sxlcom 于 2010-5-1 16:15 发表
select * fromtable1 where c in (select d from table1 where ......)?????????????

好像是有点这么个意思,表里面A和B都是可以重复的,输出的结果如果遇到A、B都是相同的,那么就用一行显示,应该怎么做?
再加上group by A,B可以吗?
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
CREATE TABLE TEST (A VARCHAR2(10),B VARCHAR2(10),C VARCHAR2(10),D VARCHAR2(10));
INSERT INTO TEST VALUES ('a1','b1','c1','1');
INSERT INTO TEST VALUES ('a2','b2','c2','5');
INSERT INTO TEST VALUES ('a2','b2','c3','4');
INSERT INTO TEST VALUES ('a3','b1','c1','3');

SELECT DECODE(rn,1,a),DECODE(rn,1,b),DECODE(rn,1,c,d)
FROM ( SELECT a,b,MAX(c) c,MAX(d) d
FROM (SELECT a,b

,REPLACE(wmsys.wm_concat(c) OVER(PARTITION BY a,b ORDER BY c),' ') AS c

,REPLACE(wmsys.wm_concat(d) OVER(PARTITION BY a,b ORDER BY c),' ') AS d

FROM test

)
GROUP BY a,b
)
,(SELECT ROWNUM rn FROM DUAL CONNECT BY ROWNUM<=2)
ORDER BY a,b,rn;
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
原帖由 newkid 于 2010-5-2 02:18 发表
CREATE TABLE TEST (A VARCHAR2(10),B VARCHAR2(10),C VARCHAR2(10),D VARCHAR2(10));
INSERT INTO TEST VALUES ('a1','b1','c1','1');
INSERT INTO TEST VALUES ('a2','b2','c2','5');
INSERT INTO TEST VALUES ('a2','b2','c3','4');
INSERT INTO TEST VALUES ('a3','b1','c1','3');

SELECT DECODE(rn,1,a),DECODE(rn,1,b),DECODE(rn,1,c,d)
FROM ( SELECT a,b,MAX(c) c,MAX(d) d
FROM (SELECT a,b

,REPLACE(wmsys.wm_concat(c) OVER(PARTITION BY a,b ORDER BY c),' ') AS c

,REPLACE(wmsys.wm_concat(d) OVER(PARTITION BY a,b ORDER BY c),' ') AS d

FROM test

)
GROUP BY a,b
)
,(SELECT ROWNUM rn FROM DUAL CONNECT BY ROWNUM

报告大侠,测试了一下不知道怎么把d取出来啊,总是说“列名无效”
我用String d = rs.getString("d")
结果就报错,咋回事呢?请指教!
[ 本帖最后由 sata01 于 2010-5-5 00:06 编辑 ]
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
为返回的三个列各取别名:A,B,D
SELECT DECODE(rn,1,a) AS A,DECODE(rn,1,b) AS B,DECODE(rn,1,c,d) AS D
FROM ( SELECT a,b,MAX(c) c,MAX(d) d
FROM (SELECT a,b

,REPLACE(wmsys.wm_concat(c) OVER(PARTITION BY a,b ORDER BY c),' ') AS c

,REPLACE(wmsys.wm_concat(d) OVER(PARTITION BY a,b ORDER BY c),' ') AS d

FROM test

)
GROUP BY a,b
)
,(SELECT ROWNUM rn FROM DUAL CONNECT BY ROWNUM<=2)
ORDER BY a,b,rn;
回复

使用道具 举报

千问 | 2007-4-25 04:02:08 | 显示全部楼层
有点明白
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行