【问题标题】:Nested case select logic in SQLSQL中的嵌套案例选择逻辑
【发布时间】:2015-12-03 20:29:53
【问题描述】:

我想创建平台列。计算列是中间步骤。我将以 Drive 为例。首先,Product Level 1 (PL1) 和 Product Level 2(PL2) 列决定 Calculation 列中的内容。因此,如果 PL2=FIN4178 且 Quantity>0,则此方将在计算栏。如果 PL1=FIN595 且 Quantity>0,则在计算栏中将其标记为 Dash。但如果同一方 1234 同时拥有 Dash 和 Drive,则会在 Platform 列中将其标记为 Drive。所以有一个命令,先是 Drive,然后是 websuite,然后是 Dash,然后是 Candian web,然后是 Lightspeed,然后是 PFW。所有其他方将是“其他基线”。

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

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

【问题讨论】:

  • 那么党决定平台吗?另外,您的计算列是否已经在输出该问题或者是问题的一部分?
  • 我还没有计算列。产品级别 1 和产品级别 2 列首先决定计算列中的内容,然后计算和派对 ID 共同决定平台。基本上,同一方 ID 可以映射到多个计算结果,但最后,我想将它们分组到平台。希望我说清楚了。谢谢亚伦!
  • 你能把这个逻辑存储在你数据库的表中吗?然后你只需要加入它来计算平台。
  • @BaconBits 不幸的是,我不能将它存储在数据库中,至少现在不能。我正在尝试提取一些原始数据进行一次性分析,所以如果这次我可以将其 sql 出来,那对我来说就足够了。

标签: sql select nested case


【解决方案1】:

在您的情况下,您可以添加另一个名为“计算优先级”的列,并为每个计算设置一个优先级编号。例如,您希望“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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2017-09-09
    • 2020-12-13
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多