SQL Server如何合并两个无关联表并生成自定义Key列?
实现方案
要实现每个StoreName和StoreStageTable的所有行组合生成新Key,核心是做笛卡尔积连接,再通过字符串拼接生成目标Key列,具体实现如下:
假设两张表的结构:
StoreTable:包含列StoreName(存储Store1、Store2这类值)StoreStageTable:包含列StageName(存储Pre、WorkInProgress、Completed这类值)
通用实现(以MySQL为例)
CREATE VIEW StoreCombinedView AS SELECT CONCAT(st.StoreName, '_', sst.StageName) AS StoreKey, st.StoreName, sst.StageName FROM StoreTable st CROSS JOIN StoreStageTable sst;
不同数据库的字符串拼接差异
- SQL Server:使用
CONCAT函数或+运算符拼接(注意处理NULL值)CREATE VIEW StoreCombinedView AS SELECT CONCAT(st.StoreName, '_', sst.StageName) AS StoreKey, st.StoreName, sst.StageName FROM StoreTable st CROSS JOIN StoreStageTable sst; - Oracle:使用
||运算符拼接CREATE VIEW StoreCombinedView AS SELECT st.StoreName || '_' || sst.StageName AS StoreKey, st.StoreName, sst.StageName FROM StoreTable st CROSS JOIN StoreStageTable sst;
关键说明
CROSS JOIN会返回两个表的所有行组合,刚好满足每个StoreName和每个StageName配对的需求- 生成的
StoreKey就是你需要的Store1_Pre、Store1_WorkInProgress这类格式 - 视图创建完成后,直接查询
StoreCombinedView就能获取所有组合结果
内容的提问来源于stack exchange,提问作者Sam332
相关产品推荐
相关产品推荐

