You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用T-SQL实现同公司同合同号男女记录并排展示(无笛卡尔积)

同一公司合同号下男女记录并排展示的实现方案

核心思路:使用等值关联替代交叉连接

通过基于Company和Contract No字段的等值连接,精准匹配同一公司、同一合同号下的男女记录,从根源上避免笛卡尔积(交叉连接)产生的冗余数据。


场景1:基于已筛选的男女记录表

假设你已经拆分出两个存储男、女记录的表:male_records(男性数据)和female_records(女性数据),可以用INNER JOIN实现精准配对:

SELECT
    m.Company,
    m.`Contract No`,
    m.Month AS Male_Month,
    f.Month AS Female_Month
FROM male_records m
INNER JOIN female_records f
    ON m.Company = f.Company
    AND m.`Contract No` = f.`Contract No`;

如果存在某合同仅单一性别记录的情况,想要保留所有存在的记录,改用双向LEFT JOIN+UNION组合:

SELECT
    COALESCE(m.Company, f.Company) AS Company,
    COALESCE(m.`Contract No`, f.`Contract No`) AS `Contract No`,
    m.Month AS Male_Month,
    f.Month AS Female_Month
FROM male_records m
LEFT JOIN female_records f
    ON m.Company = f.Company
    AND m.`Contract No` = f.`Contract No`
UNION
SELECT
    COALESCE(m.Company, f.Company) AS Company,
    COALESCE(m.`Contract No`, f.`Contract No`) AS `Contract No`,
    m.Month AS Male_Month,
    f.Month AS Female_Month
FROM female_records f
LEFT JOIN male_records m
    ON f.Company = m.Company
    AND f.`Contract No` = m.`Contract No`;

场景2:直接从原表处理(无需提前拆分)

如果还未拆分男女数据,可直接在原表中筛选后关联:

SELECT
    m.Company,
    m.`Contract No`,
    m.Month AS Male_Month,
    f.Month AS Female_Month
FROM (SELECT * FROM your_source_table WHERE Gender = '男') m
INNER JOIN (SELECT * FROM your_source_table WHERE Gender = '女') f
    ON m.Company = f.Company
    AND m.`Contract No` = f.`Contract No`;

关键注意点

  • 等值连接的条件严格限定Company和Contract No完全匹配,只会生成符合业务逻辑的配对记录,不会产生无意义的笛卡尔积数据。
  • 含空格的字段名(如Contract No)需用反引号或双引号包裹,避免语法错误。

内容的提问来源于stack exchange,提问作者kkp0897

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:36:04