使用Oracle 11
我想从表中提取数据,并添加一列来自子查询语句的计算值。
示例表1是:
COLUMN1: COLUMN2:
1 Group1
3 Group2
5 Group3
6 Group4
每次运行查询时,子查询都返回不同的值,但是为了这个例子,我们假设它返回值:
2
4
7
8
我需要的是结合结果
COLUMN1: COLUMN2: COLUMN3: (subquery - order does NOT matter)
1 Group1 2
3 Group2 4
5 Group3 7
6 Group4 8
但是因为子查询是从表中返回的每一行计算的,所以我得到的只是。
COLUMN1: COLUMN2: COLUMN3:
1 Group1 2
3 Group2 2
5 Group3 2
6 Group4 2
我无法想到关联表和子查询,我尝试过使用ROWNUM但没有运气。
更新
SELECT GD.*, N
FROM patrongroupsdesc GD,
(SELECT n
FROM patrongroupsdesc GD2,
(SELECT n, ROWNUM
FROM ( SELECT ROWNUM n
FROM DUAL
CONNECT BY LEVEL <= 100)
WHERE n >= 1) SUB
WHERE SUB.n = GD2.groupid(+) AND GD2.groupid IS NULL) SUB2
表PATRONGROUPSDESC的格式如下
groupid (NUMBER)
description (VARCHAR2)
...other data
SUB返回值1-100
SUB2返回groupid数字中的间隙
我基本上复制了这个表中的所有数据,除了一列
答案 0 :(得分:0)
首先,您必须知道,如果您没有ORDER BY
条款,则结果的顺序会带有完全不保证。
然后,你可以这样做:
WITH first_table AS (select *, ROWNUM AS rn FROM ...)
, secnd_table AS (select *, ROWNUM AS rn FROM ...)
SELECT first_table.*, secnd_table.*
FROM first_table INNER JOIN secnd_table USING (rn)
这里的技巧是ROWNUM
被分配为SELECT
语句的结果。因此,如果要粘贴这样的表,则必须从表中选择SELECT并将rownum存储在另一列中,然后从这两个子选择中加入。