SQL 使用条件列查找 table
SQL look up table with condition column
我正在寻找一种使用 'lookup' table 获取颜色值的方法。
请参阅下面的两个 table 和查找结果的示例。
Table 列和值:
ColumnName | Condition | CellColor
Rank | > 90 | Green
Rank | between 70 and 89 | Yellow
Rank | < 70 | Red
Score | > 89 | Purple
Score | < 88 | Orange
人员Table
Name | Rank | Score
Jane | 100 | 50
John | 77 | 90
Kelly| 50 | 99
我想要得到的结果
PersonnelName | Rank | RankCellColor | Score | Scoredcolor
Jane | 100 | Green | 50 | Orange
John | 77 | Yellow | 90 | Purple
Kelly | 50 | Red | 99 | Purple
我尝试遍历排名和分数列,但在如何使用条件方面遇到了困难。我迷失了编码。
我真的需要帮助来解决这个问题。
如有任何帮助,我们将不胜感激!
SQL 不适用于此类问题。您可以将条件 table 构造为:
ColumnName, Lower, Upper, CellColor
Rank, 90, NULL, Green
Rank, 70, 89, Yellow
Rank, NULL, 70, Red
Score, 89, NULL, Purple
Score, NULL, 88, Orange
那么您的查询将如下所示:
select p.*, cr.color as rankcolor, cs.color as scorecolor
from personnel p left join
conditions c
on cr.columnname = 'Rank' and
(p.rank >= cr.lower or cr.lower is null) and
(p.rank <= cr.upper or cr.upper is null) left join
conditions cs
on cs.columnname = 'Score' and
(p.score >= cs.lower or cs.lower is null) and
(p.score <= cs.upper or cs.upper is null);
如果您指定颜色的下限和上限,这会容易得多。
您可以加入 table 值落在下限和上限范围内的值。
CREATE TABLE Conditions (ColumnName varchar(50), minval int, maxval int, CellColor varchar(50))
INSERT INTO Conditions
VALUES
('Rank', 90, 100, 'Green')
,('Rank', 70, 89, 'Yellow')
,('Rank', 0, 70, 'Red')
,('Score', 89, 100, 'Purple')
,('Score', 0, 88, 'Orange')
CREATE TABLE Personnel (Name varchar(50), Rank int, Score int)
INSERT INTO Personnel
VALUES
('Jane', 100, 50)
,('John', 77, 90)
,('Kelly', 50, 99)
SELECT P.Name, P.Rank, ConRank.CellColor, P.Score, ConScore.CellColor
FROM Personnel P
INNER JOIN Conditions ConRank
ON P.Rank >= ConRank.minval AND P.Rank <= ConRank.maxval AND ConRank.ColumnName = 'Rank'
INNER JOIN Conditions ConScore
ON P.Score >= ConScore.minval AND P.Score <= ConScore.maxval AND ConScore.ColumnName = 'Score'
ORDER BY P.Name
给出输出:
Name Rank CellColor Score CellColor
Jane 100 Green 50 Orange
John 77 Yellow 90 Purple
Kelly 50 Red 99 Purple
参考这个 sqlfiddle:http://sqlfiddle.com/#!6/15f3a/6
我正在寻找一种使用 'lookup' table 获取颜色值的方法。 请参阅下面的两个 table 和查找结果的示例。
Table 列和值:
ColumnName | Condition | CellColor
Rank | > 90 | Green
Rank | between 70 and 89 | Yellow
Rank | < 70 | Red
Score | > 89 | Purple
Score | < 88 | Orange
人员Table
Name | Rank | Score
Jane | 100 | 50
John | 77 | 90
Kelly| 50 | 99
我想要得到的结果
PersonnelName | Rank | RankCellColor | Score | Scoredcolor
Jane | 100 | Green | 50 | Orange
John | 77 | Yellow | 90 | Purple
Kelly | 50 | Red | 99 | Purple
我尝试遍历排名和分数列,但在如何使用条件方面遇到了困难。我迷失了编码。 我真的需要帮助来解决这个问题。
如有任何帮助,我们将不胜感激!
SQL 不适用于此类问题。您可以将条件 table 构造为:
ColumnName, Lower, Upper, CellColor
Rank, 90, NULL, Green
Rank, 70, 89, Yellow
Rank, NULL, 70, Red
Score, 89, NULL, Purple
Score, NULL, 88, Orange
那么您的查询将如下所示:
select p.*, cr.color as rankcolor, cs.color as scorecolor
from personnel p left join
conditions c
on cr.columnname = 'Rank' and
(p.rank >= cr.lower or cr.lower is null) and
(p.rank <= cr.upper or cr.upper is null) left join
conditions cs
on cs.columnname = 'Score' and
(p.score >= cs.lower or cs.lower is null) and
(p.score <= cs.upper or cs.upper is null);
如果您指定颜色的下限和上限,这会容易得多。 您可以加入 table 值落在下限和上限范围内的值。
CREATE TABLE Conditions (ColumnName varchar(50), minval int, maxval int, CellColor varchar(50))
INSERT INTO Conditions
VALUES
('Rank', 90, 100, 'Green')
,('Rank', 70, 89, 'Yellow')
,('Rank', 0, 70, 'Red')
,('Score', 89, 100, 'Purple')
,('Score', 0, 88, 'Orange')
CREATE TABLE Personnel (Name varchar(50), Rank int, Score int)
INSERT INTO Personnel
VALUES
('Jane', 100, 50)
,('John', 77, 90)
,('Kelly', 50, 99)
SELECT P.Name, P.Rank, ConRank.CellColor, P.Score, ConScore.CellColor
FROM Personnel P
INNER JOIN Conditions ConRank
ON P.Rank >= ConRank.minval AND P.Rank <= ConRank.maxval AND ConRank.ColumnName = 'Rank'
INNER JOIN Conditions ConScore
ON P.Score >= ConScore.minval AND P.Score <= ConScore.maxval AND ConScore.ColumnName = 'Score'
ORDER BY P.Name
给出输出:
Name Rank CellColor Score CellColor
Jane 100 Green 50 Orange
John 77 Yellow 90 Purple
Kelly 50 Red 99 Purple
参考这个 sqlfiddle:http://sqlfiddle.com/#!6/15f3a/6