sql - 如何在 SQL 中编写 IF 语句来隐藏非重复行
问题描述
感谢您对此进行调查,非常感谢。
我想要一个名为“SHOW_or_HIDE”的附加列,我可以在其中添加 Tableau 中的过滤器功能。
下面是我的 Tableau 的 SQL 表,我想根据相同的季度是否同时具有“POR”和“CWV”两种类型来创建一个 IF 语句,然后我想将其分类为“SHOW”,但如果它只显示一个 POR 或CWV 在四分之一然后“隐藏”。基本上,我只希望我的表格条形图显示仅包含 POR 和 CWV 的完整季度,如果该季度只有 POR 或 CWV 之一,我想隐藏但仍然可以选择在 Tableau 中显示它们。
我对 SQL 非常陌生,所以我也很难嵌套它。
当前表
设想 | 类型 | 四分之一 | 程序 | 地球仪 | 单位 | 显示或隐藏 |
---|---|---|---|---|---|---|
(4) FY20-Q1_POR | 上门 | FY20-Q1 | XYZ | 美国 | 2 | 隐藏 |
(3) FY20-Q2_CWV | CWV | FY20-Q2 | XYZ | 美国 | 1 | 节目 |
(4) FY20-Q2_POR | 上门 | FY20-Q2 | XYZ | 美国 | 5 | 节目 |
(3) FY20-Q3_CWV | CWV | FY20-Q3 | XYZ | 美国 | 3 | 节目 |
(4) FY20-Q3_POR | 上门 | FY20-Q3 | XYZ | 美国 | 4 | 节目 |
(3) FY20-Q4_CWV | CWV | FY20-Q4 | XYZ | 美国 | 9 | 隐藏 |
(3) FY21-Q1_CWV | CWV | FY21-Q1 | XYZ | 美国 | 1 | 节目 |
(4) FY21-Q1_POR | 上门 | FY21-Q1 | XYZ | 美国 | 1 | 节目 |
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
推荐阅读
- java - 如果我尝试实现抽象操作接口,为什么 JButton 不会出现在 JFrame 上?
- reactjs - 如何避免加载不存在的静态页面?
- casting - 铸造绑定
输入 Int - Swift UI - python - 如何在 django 中更新卖家资料?
- lua - 脚本不只停止键盘
- python - 用键盘按钮控制 Kivy 滑块?
- html - 将html数据导入Excel时如何显示阿拉伯字母?
- python - 安装 Bitcoinlib 时出错 | Python3、Windows10
- xamarin.android - 在 Xamarin 本机项目中使用 SkiSharp
- mysql - Flask 和 MySQL 的 Gitlab Yaml 设置示例