我正在尝试将事实表的ID设置为与我的维度表相同。
PRICE_TABLE FACT_TABLE
P_ID P_ID
1 0
2 0
3 0
... ....
有没有人对此有好的方法?
UPDATE FACT_TABLE
SET FACT_TABLE.P_ID = PRICE_TABLE.P_ID
/* cannot seem to get a join here working */
我已尝试加入表格,但由于没有共同的价值观,我似乎无法让它发挥作用。
答案 0 :(得分:0)
您可以使用select:
中的更新UPDATE ft
SET ft.P_ID = pt.P_ID
FROM FACT_TABLE ft
LEFT JOIN PRICE_TABLE pt ON (pt.SomeField = ft.AnotherField) -- some join condition should be here
你也可以使用insert into select,如:
TRUNCATE TABLE FACT_TABLE; -- it will remove all data from your table
GO;
INSERT INTO FACT_TABLE (P_ID, other fields...)
SELECT P_ID, other fields FROM PRICE_TABLE
答案 1 :(得分:0)
您可以使用ROW_NUMBER
来加入两个表中的记录,如下所示:
;WITH FACT_TABLE_RN AS (
SELECT P_ID,
ROW_NUMBER() OVER (ORDER BY P_ID) AS rn
FROM FACT_TABLE
), PRICE_TABLE_RN AS (
SELECT P_ID,
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
FROM PRICE_TABLE
)
UPDATE ft
SET P_ID = pt.P_ID
FROM FACT_TABLE_RN AS ft
JOIN PRICE_TABLE_RN AS pt ON pt.rn = ft.rn
答案 2 :(得分:0)
目前,我可以向你求助。 我想我们可以找到没有临时表的另一种方法。 但它暂时应该做好工作。
with prices as
(
select
id = row_number() over(),
P_ID
from PRICE_TABLE
),
facts as
(
select
id = row_number() over()
-- facts fieds you want
from FACT_TABLE
)
select
P_ID = prices.P_ID
-- facts fieds you want
into #facts
from facts
join prices on prices.id = facts.id
delete FACT_TABLE
insert FACT_TABLE
(
P_ID
-- facts fieds you want
)
select
P_ID
-- facts fieds you want
from #facts
drop table #facts
您可能必须取消选中FACT_TABLE.P_ID上的约束才能使用此脚本
如果我理解得很清楚,你的FACT_TABLE只包含你的P_ID,它来自PRICE_TABLE。 为什么需要直接使用此FACT_TABLE而不是PRICE_TABLE? 为什么不使用insert / select创建FACT_TABLE而不是尝试更新FACT_TABLE的P_ID字段?