我有一个存储过程,可以将数据从ERP提取到数据仓库(DW)中。 我面临的问题是DW的人要求我为每行提供一个唯一的ID。
示例
CREATE TABLE [dbo].[INVOICES](
[InvID] [nchar](10) NULL,
[LineID] [nchar](10) NULL,
[Amount] [decimal](32, 4) NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[DISTRIBUTION](
[InvID] [nchar](10) NULL,
[LineID] [nchar](10) NULL,
[Percent] [decimal](3, 2) NULL
) ON [PRIMARY]
InvID LineID Amount
---------- ---------- ---------------------------------------
FC0000001 1 6788.0000
FC0000001 2 8908.0000
InvID LineID Percent
---------- ---------- ----------------------
FC0000001 1 10
FC0000001 1 90
FC0000001 2 100
所以,你可以查询:
SELECT I.InvID + '-' + D.LineID AS ID, D.*
FROM [INVOICES] AS I
LEFT JOIN [DISTRIBUTION] AS D
ON D.InvID = I.InvID
and D.LineID = I.LineID
并且会得到:
ID InvID LineID Percent
-------------------- ---------- ---------- ----------------------
FC0000001-1 FC0000001 1 10
FC0000001-1 FC0000001 1 90
FC0000001-2 FC0000001 2 100
但是,正如您所见,如果同一LineID和InvID在[DISTRIBUTION]处有两条记录,您将从上面的查询中获得两条记录,并且表[DISTRIBUTION]不包含每条记录的ID线。
问题
所以,我需要动态创建一个ID:
我已尝试过的内容
答案 0 :(得分:0)
在Oracle中,每个表中的每一行都有ROWID,在SQL Server上有一个未记录的列 %% physloc %% 与ROWID相同。
所以在你的情况下你可以试试。
SELECT %%physloc%%, *
FROM [DISTRIBUTION]
有关 %% physloc %%
的更多信息,请参阅stackoverflow上写得非常好的answer