SQL设置状态基于多个条件

时间:2017-09-07 18:57:35

标签: sql mysqli informatica

来源表:

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设置。

1 个答案:

答案 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 ....

让我们知道它是如何为您服务的。 如有任何进一步澄清,请不要犹豫。

泰德。