如何在SQL中写一个IF语句来隐藏非重复行

How to write an IF statement in SQL to hide the non duplicated row

感谢您对此的关注,非常感谢。

我想要一个名为 "SHOW_or_HIDE" 的附加专栏,我可以在其中添加 Tableau.[=13= 中的过滤器功能]

下面是我的 SQL table 对于我的 Tableau 我想创建一个 IF 语句,如果相同的季度有 BOTH 输入“POR”和“CWV”,然后我想将其归类为“SHOW”,但如果它在四分之一内仅显示一个 POR 或 CWV,则“HIDE”。基本上,我只希望我的 tableau 条形图显示一个完整的季度,仅包含 POR 和 CWV,如果该季度只有 POR 或 CWV 中的一个,我想隐藏,但仍然可以选择将它们显示在Tableau.

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

当前Table

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

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

但我们的想法是对每种类型的不同区域进行 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