如何在factTable中添加RegionID并关联dimRegion(无需创建子表)
解决方案
1. 自动生成维度表dimRegion
无需手动创建子表,直接从factTable提取唯一区域值,自动生成带主键RegionID的维度表:
-- 创建dimRegion表,RegionID设为自增主键 CREATE TABLE dimRegion ( RegionID INT IDENTITY(1,1) PRIMARY KEY, Region VARCHAR(100) UNIQUE NOT NULL ); -- 从factTable导入唯一的Region值 INSERT INTO dimRegion (Region) SELECT DISTINCT Region FROM factTable;
2. 为factTable添加并更新RegionID字段
不用写全列的SELECT语句,直接通过关联更新完成字段填充:
-- 先给factTable新增RegionID字段 ALTER TABLE factTable ADD RegionID INT; -- 关联dimRegion更新对应RegionID值 UPDATE f SET f.RegionID = d.RegionID FROM factTable f JOIN dimRegion d ON f.Region = d.Region;
3. 建立外键约束(可选)
如果需要正式建立两张表的关联关系,添加外键约束:
ALTER TABLE factTable ADD CONSTRAINT FK_factTable_RegionID FOREIGN KEY (RegionID) REFERENCES dimRegion(RegionID);
临时生成RegionID(仅查询场景)
如果只是查询时需要RegionID,无需永久修改表结构,可直接用窗口函数生成:
SELECT *, DENSE_RANK() OVER(ORDER BY Region) AS RegionID FROM factTable;
DENSE_RANK()会为相同Region分配同一ID,更符合维度表主键的唯一性逻辑。
内容的提问来源于stack exchange,提问作者Shekhar Shrestha
相关产品推荐
相关产品推荐

