来源表:
ID | TYP | PREF | TRG | RTG | FLG
1 | 6 | 1 | YES | HIGH | 1
2 | 6 | 2 | NO | HIGH | 0
3 | 7 | 1 | YES | LOW | 1
4 | 7 | 2 | YES | NEUTRAL | 0
9 | 7 | 3 | YES | NEUTRAL | 0
4 | 6 | 1 | YES |LOW | 1
7 | 6 | 2 | YES | HIGH | 0 |
5 | 8 | 1 | NO | NEUTRAL | 1
6 | 8 |2 | NO | LOW | 0
如果PREF = YES并且 对于特定的TYP,其中FLAG = 1, 如果任何一个TRG为高电平,则将状态设置为高电平。 同样,任何一个TRG都是NEUTRAL,然后将状态设置为NEUTRAL,否则为LOW。如果FLAG = 0,则设置STATUS = TRG。 如果PREF = NO,则没有STATUS
预期目标表:
ID | TYP | PREF | TRG | RTG | FLG |STATUS
1 | 6 | 1 | YES | HIGH | 1 | HIGH
2 | 6 | 2 | NO | HIGH | 0 |
3 | 7 | 1 | YES | LOW | 1 | NEUTRAL
4 | 7 | 2 | YES | NEUTRAL | 0 | NEUTRAL
9 | 7 | 3 | YES | NEUTRAL | 0 | NEUTRAL
4 | 6 | 1 | YES |LOW | 1 | HIGH
7 | 6 | 2 | YES | HIGH | 0 | HIGH
5 | 8 | 1 | NO | NEUTRAL | 1 |
6 | 8 |2 | NO | LOW | 0 |
如何实现这一目标? 我遇到的主要部分是检查TYP列中特定值的数据。如果TYP的任何1值为高,则仅在Flah = 1的情况下将状态设置为高,依此类推。 TYP 7的示例,TRG为低,中性,中性。 ,因此将状态设置为中性,其中flag = 1。如果flag = 0,则按TRG设置。
答案 0 :(得分:0)
CASE会做到这一点:
SELECT
ID , TYP , PREF , TRG , RTG , FLG ,
CASE WHEN PREF='YES' AND FLAG=1 AND TRG='HIGH' THEN 'HIGH'
WHEN PREF='YES' AND FLAG=1 AND TRG='NEUTRAL' THEN 'NEUTRAL'
WHEN FLAG=0 THEN 'TRG'
ELSE 'LOW
END CASE as STATUS
FROM ....
让我们知道它是如何为您服务的。 如有任何进一步澄清,请不要犹豫。
泰德。