繁体   English   中英

填充事实表SQL Server

[英]Populate fact table SQL server

我试图将一个事实表的ID设置为与维度表中的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 */

我曾尝试加入表格,但由于没有共同的价值观,我似乎无法使其正常运作。

您可以从以下选项中使用更新:

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

您可以使用ROW_NUMBER从两个表中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

目前,我可以向您提出建议。 我想我们可以在没有临时表的情况下找到另一种方式。 但这暂时应该做的工作。

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仅包含来自PRICE_TABLE的P_ID。 为什么需要直接使用此FACT_TABLE而不是PRICE_TABLE? 为什么不使用插入/选择创建FACT_TABLE而不是尝试更新FACT_TABLE的P_ID字段?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM