用于SP中分组数据的SQL唯一PK

时间:2017-09-21 10:54:28

标签: sql-server tsql stored-procedures solr

我正在尝试使用来自多个表(在SP中)的分组数据构建临时表,我成功构建了数据集但是我要求每个分组行都有唯一的ID。我知道有很多方法可以为每一行生成唯一的ID,但是我遇到的问题是,无论返回的行数是多少,我都需要每次运行时给定行的id都相同。

示例:

第一轮:

ID Column A Column B 1 apple 15 2 orange 10 3 grape 11

第二轮:

ID Column A Column B 3 grape 11

我想要这个的原因是因为我将此数据发送到 SOLR ,当我执行delta时,我需要将ID返回到与尝试重新索引<相同的行/ p>

我能做到这一点吗?

2 个答案:

答案 0 :(得分:0)

不确定这是否有帮助,并不完全相信你的更广泛的画面,但...... 在汇总新数据时,将每个[column a]值记录在您自己的表中。 给该表一个IDENTITY列以便为您编号。

现在,您可以将任何新数据集加入查找表,并且每列A都有一个持久数字。

您只需确保每次查询新数据时都将新值添加到查找表中。

create table dbo.myRef(
    idx int identity(1,1)
    ,[A] nvarchar(100)
 )

总草案如下......

--- just simulating some input data here
with cte as (
 select 'apple' as [A], 15 as [B]
 UNION
 select 'orange' as [A], 10 as [B]
 UNION
 select 'banana' as [A], 4 as [B]
) 
select * into #temp from cte;

-- Put any new values into the lookup table
-- and they will be assigned a new index number by the identity column
insert into dbo.myRef([A])
select distinct [A] 
from #temp where [A] not in (select [A] from dbo.myRef)

-- now pull your original data for output, joining to the lookup table to get a ref number.
 select T.*,R.idx
 from   #temp T
    inner join 
    oer.myRef R
    on T.[A] = R.[A]

答案 1 :(得分:0)

很抱歉迟到的回复,我被其他东西困住了,但是我解决了自己的问题。

我构建了2个临时表,其中包含来自各个表(#master)和另一个临时表(#final)的所有数据,以容纳所有分组数据,其中包含ID的空列

接下来,我在#master的3列上做了一个concat(column1,' - ',column2,' - ',column3),并根据类型更新了#final表

这有助于我在每次运行中得到相同的concat ID