SQL

时间:2015-12-03 20:29:53

标签: sql select nested case

enter image description here

我想创建Platform列。计算列是中间步骤。我将使用Drive作为示例。首先,产品级别1(PL1)和产品级别2(PL2)列决定计算列中的内容。因此,如果PL2 = FIN4178且数量> 0,则此方将标记为首先在计算列中开车。如果PL1 = FIN595且Quantity> 0,则在计算列中将其标记为Dash。但是如果同一方1234同时具有Dash和Drive,则它将被标记为Drive in Platform列。所以有一个订单,Drive然后是websuite然后是Dash然后是Candian web然后是Lightspeed然后是PFW。所有其他方将是"其他基线"。

我对SQL很陌生,无法弄明白。我认为这是一个嵌套的案例选择逻辑。有人可以帮忙吗?只有Select语句就足够了,先谢谢!

如果您需要我分享任何其他信息,请随时提出。

1 个答案:

答案 0 :(得分:0)

在您的情况下,您可以添加另一个名为“计算优先级”的列,并为每个计算设置优先级编号。例如,您希望“Drive”或“FIN4178”的优先级为1,然后列出其余的计算优先级。

         calcPriority = CASE WHEN productlevel1 = 'FIN595' or productlevel2 = 'FIN595' then 3
                             WHEN productlevel1 = 'FIN4178' or productlevel2 = 'FIN4178' then 1
                             WHEN productlevel1 = 'FIN4179' or productlevel2 = 'FIN4179' then 2
                             WHEN productlevel1 = 'FIN5599' or productlevel2 = 'FIN5599' then 5
                             WHEN productlevel1 = 'FIN1385' or productlevel2 = 'FIN1385' then 6
                             WHEN productlevel1 = 'FIN5596' or productlevel2 = 'FIN5596' then 4
                        END

然后,您可以将数据分解为按“PARTY”列分组的组,并选择caculation = min(calculationPriority),以便每个组仅包含每行的最高优先级项目。

最后,使用简单的case语句构建平台列,如下所示

    case when maxOfParty = 6 then 'PFW'
                        when maxOfparty = 5 then 'Lightspeed'
                        when maxOfParty = 4 then 'Canadian web'
                        when maxOfParty = 3 then 'Dash'
                        when maxOfParty = 2 then 'webSuite'
                        when maxOfParty = 1 then 'Drive'