【问题标题】:How to write an IF statement in SQL to hide the non duplicated row如何在 SQL 中编写 IF 语句来隐藏非重复行
【发布时间】:2021-01-30 03:18:34
【问题描述】:

感谢您对此进行调查,非常感谢。

我想要一个名为 “SHOW_or_HIDE” 的附加列,以便在 Tableau 中添加过滤器功能。

下面是我的 Tableau 的 SQL 表,我想根据同一季度是否有 BOTH 类型“POR”和“CWV”创建一个 IF 语句,然后我想将其分类为“SHOW " 但如果它只在一个季度中显示一个 POR 或 CWV,则“隐藏”。基本上,我只希望我的表格条形图仅显示包含 POR 和 CWV 的完整季度,如果该季度只有 POR 或 CWV 之一,我想隐藏但仍然可以选择在 Tableau 中显示它们。

我对 SQL 非常陌生,所以我也很难嵌套它。

当前表

SCENARIO TYPE QUARTER PROGRAM GEO UNITS SHOW or HIDE
(4) FY20-Q1_POR POR FY20-Q1 XYZ USA 2 HIDE
(3) FY20-Q2_CWV CWV FY20-Q2 XYZ USA 1 show
(4) FY20-Q2_POR POR FY20-Q2 XYZ USA 5 show
(3) FY20-Q3_CWV CWV FY20-Q3 XYZ USA 3 show
(4) FY20-Q3_POR POR FY20-Q3 XYZ USA 4 show
(3) FY20-Q4_CWV CWV FY20-Q4 XYZ USA 9 HIDE
(3) FY21-Q1_CWV CWV FY21-Q1 XYZ USA 1 show
(4) FY21-Q1_POR POR FY21-Q1 XYZ USA 1 show
etc
#legacy sql
SELECT CASE WHEN TYPE ='CWV' THEN CONCAT('(3) ',QUARTER,'_',TYPE) 
    WHEN TYPE ='POR' THEN CONCAT('(4) ',QUARTER,'_',TYPE) 
    END AS SCENARIO
    , CASE WHEN TYPE = 'ACTL' THEN 'ACTUALS'
            WHEN TYPE = 'OTLK' THEN 'OUTLOOK'
            ELSE TYPE END AS TYPE
    , QUARTER 
    , BC.PROGRAM AS PROGRAM 
    ,  CASE WHEN GEO = 'Europe' THEN 'EUROPE' 
         WHEN GEO = 'India' THEN 'Pan India'
         WHEN GEO = 'LATAM' THEN 'LA'
      ELSE GEO END GEO
    , FLOAT(SUM(CA)) AS UNITS

    ***, #--> ?? HERE: my guess is in this line is where I would put the coding?? AS "SHOW_or_HIDE"***

  FROM [xxxxxxxxxxxxxxxxxxxxxxxxxxx.BC_REPORTS] BC

where PROGRAM = 'XYZ'    #these are my temporary filters for easier viewing
and TYPE <>'ACTL'        #these are my temporary filters for easier viewing
and TYPE <>'OTLK'        #these are my temporary filters for easier viewing
and GEO = 'NA'           #these are my temporary filters for easier viewing
and CUSTOMER = 'xyz'     #these are my temporary filters for easier viewing  

group by  1,2,3,4,5
order by 3,2





[![enter image description here][1]][1]


  [1]: https://i.stack.imgur.com/xRotX.png

【问题讨论】:

    标签: sql tableau-api


    【解决方案1】:

    可能不是最好的解决方案。

    但我们的想法是在每种类型的不同季度上使用 LEFT OUTER JOIN,然后检查 NULL 值。

    使用 MS Access 编写,因此实际 SQL 可能略有不同(iif 函数)。

    select 
        iif (type = 'CWV', '(3) ' + bc.quarter + '_' + type, iif(type = 'POR', '(4) ' + bc.quarter + '_' + type, null)) as scenario,
        type,
        bc.quarter,
        program,
        geo,
        sum(ca) as units,
        iif(cw.quarter is not null and por.quarter is not null, 'SHOW', 'HIDE') as show_or_hide
    from (
        bc_reports as bc 
        left outer join (select distinct quarter from bc_reports where type = 'CWV') cw on bc.quarter = cw.quarter
    )
    left outer join (select distinct quarter from bc_reports where type = 'POR') por on bc.quarter = por.quarter
    group by bc.quarter, type, program, geo, cw.quarter, por.quarter
    order by 3, 2
    

    Output

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 2021-10-13
      • 2020-04-07
      • 1970-01-01
      • 2012-12-05
      • 2017-02-05
      • 2010-10-29
      相关资源
      最近更新 更多