尝试找到编写此 SQL 语句的最佳方法。
我有一个客户表,其中包含该客户的内部信用评分。然后我有另一个表,其中包含该信用评分的定义。我想将这些表连接在一起,但第二个表没有任何方法可以轻松链接它。
客户的评分是1-999之间的整数,定义表有以下几列:
Score
Description
这些行:
60 LOW
99 MED
999 HIGH
所以基本上,如果客户的分数在 1 到 60 之间,那么他们的分数就低,61-99 的分数就高,100-999 的分数就高。
我无法真正 INNER JOIN 这些,因为只有当分数为 60、99 或 999 时它才会加入它们,并且这会排除具有这些分数的其他任何人。
我不想用静态数字做一个案例陈述,因为我们的分数将来可能会改变,并且我不想在他们改变时更新我的初始查询。我也无法创建任何表或函数来执行此操作 - 我需要创建一个 SQL 语句来为我执行此操作。
编辑:
一位同事说这可行,但有点疯狂。我认为必须有更好的方法:
SELECT
internal_credit_score
(
SELECT
credit_score_short_desc
FROM
cf_internal_credit_score
WHERE
internal_credit_score = (
SELECT
max(credit.internal_credit_score)
FROM
cf_internal_credit_score credit
WHERE
cs.internal_credit_score <= credit.internal_credit_score
AND credit.internal_credit_score <= (
SELECT
min(credit2.internal_credit_score)
FROM
cf_internal_credit_score credit2
WHERE
cs.internal_credit_score <= credit2.internal_credit_score
)
)
)
FROM
customer_statements cs
最佳答案
尝试一下,更改表格以包含分数范围:
ScoreTable
-------------
LowScore int
HighScore int
ScoreDescription string
数据值
LowScore HighScore ScoreDescription
-------- --------- ----------------
1 60 Low
61 99 Med
100 999 High
查询:
Select
.... , Score.ScoreDescription
FROM YourTable
INNER JOIN Score ON YourTable.Score>=Score.LowScore
AND YourTable.Score<=Score.HighScore
WHERE ...
关于sql - 连接到没有范围但需要范围的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6931805/