【问题标题】:SQL Join if greater than 'out of range'如果大于“超出范围”,则 SQL 加入
【发布时间】:2017-10-13 15:13:57
【问题描述】:

MemberRisk 表,包含以下列:

会员表:

  • 身份证
  • 姓名
  • 性别
  • 年龄

风险表:

  • 年龄
  • 性别
  • 风险评分

Risk 表中,每个年龄都有相关的风险评分,但 60 岁是最后一条记录,因为 60 岁以上的任何年龄都应该与 60 岁的风险评分相同。

我想在查询中加入这两个表,但以下查询将显示年龄 > 60 的空风险评分。

如何在查询中显示 60 岁以上成员的风险评分?

SELECT 
    m.ID, 
    m.AGE,
    r.RiskScore
FROM 
    Member AS m
LEFT JOIN 
    Risk AS r ON r.age = m.age AND ON r.Gender = m.Gender

RiskScoresGenderAge 不同。

【问题讨论】:

  • 添加一些示例表数据和预期结果。 (请格式化文本。)

标签: sql sql-server join


【解决方案1】:

你试过了吗(我没试过)

SELECT 
    m.ID, 
    m.AGE,
    r.RiskScore
FROM Member AS m
LEFT JOIN Risk AS r ON r.age = case when m.age >= 60 then 60 else m.age end AND ON r.Gender = m.Gender

【讨论】:

  • 我不知道您可以在 Join 中使用 Case When。很高兴知道。谢谢!!
【解决方案2】:

如果成员年龄大于 60,则使用 IIF 函数将其设置为 60。

  SELECT 
        m.ID, 
        m.AGE,
        r.RiskScore
    FROM 
        Member AS m
    LEFT JOIN 
        Risk AS r ON r.Gender = m.Gender AND r.age = IIF(60 < m.age , 60 ,m.age)

【讨论】:

  • 谢谢。这是最简单的解决方案。
  • 除了应该是:IIF(60
  • @inincubus:谢谢。刚刚从我脑海中闪过。
【解决方案3】:

没有使用 SQL Server 的经验,但看起来你可以做到:

LEFT JOIN Risk as r on r.age = MIN(60, m.age)

【讨论】:

猜你喜欢
  • 2018-10-16
  • 2023-03-31
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多