Sql 基于唯一的\u id应用序列
我有一张桌子: 表1Sql 基于唯一的\u id应用序列,sql,oracle,Sql,Oracle,我有一张桌子: 表1 unique_id col_id val_id 1 100 a 1 101 b 1 102 c 1 103 d 2 106 a 2 106 b 2 104 c 2 103 d 我想使用一个序列为每个唯一的_id分配它 我写了以
unique_id col_id val_id
1 100 a
1 101 b
1 102 c
1 103 d
2 106 a
2 106 b
2 104 c
2 103 d
我想使用一个序列为每个唯一的_id分配它
我写了以下似乎不起作用的内容:
SELECT
my_seq.NEXTVAL over
(
PARTITION BY a.unique_id ORDER by a.unique_id) AS rec_i,
a.* FROM table1
a;
产出将是:
unique_id col_id val_id rec_i
1 100 a 123
1 101 b 123
1 102 c 123
1 103 d 123
2 106 a 124
2 106 b 124
2 104 c 124
2 103 d 124
我怎样才能让它工作?试试这个:
-- data preparation
create table tt_table (unique_id number, col_id number, val_id varchar2(1));
insert into tt_table values(1,100,'a');
insert into tt_table values(1,101,'b');
insert into tt_table values(1,102,'c');
insert into tt_table values(1,103,'d');
insert into tt_table values(2,106,'a');
insert into tt_table values(2,104,'b');
insert into tt_table values(2,103,'c');
insert into tt_table values(2,103,'d');
-- creating function
CREATE OR REPLACE FUNCTION GET_SEQ RETURN NUMBER AS
BEGIN
RETURN TEJASH_SEQ.NEXTVAL;
END GET_SEQ;
/
--
-- actual query
--
WITH T2 AS (
SELECT /*+ materialize */
UNIQUE_ID,
GET_SEQ SEQ_VALUE
FROM
(
SELECT DISTINCT
UNIQUE_ID
FROM
TT_TABLE
) T2IN
)
SELECT
T1.UNIQUE_ID,
T1.COL_ID,
T1.VAL_ID,
T2.SEQ_VALUE
FROM
TT_TABLE T1,
T2
WHERE
T1.UNIQUE_ID = T2.UNIQUE_ID
ORDER BY
T1.UNIQUE_ID;
希望有帮助。为什么unique\u id列不够好,不能用作rec\u i?unique\u id来自源表。我需要使用已在目标表中使用的序列。我需要将这些行插入到我的目标表中;该列中的值不是唯一的!很难按原样为行分配序列,因为.nextval不是一个分析函数,这正是您试图使用它的目的。您可以使用row_number()分析函数的组合将.nextval分配给每个组中的第一行,然后使用first_value()分析函数将值分配给每个组中的其余行。这很有意义。您是否考虑使用SQL查询来执行此操作?鉴于
unique\u id
和您建议的rec\u i
之间似乎存在1:1的相关性,rec\u i
的好处到底是什么?太好了,让我来测试一下。你在Skype上吗?测试一下,让我知道它是否适合你?分享你的Skype ID,我会打电话给你。这里-