CASE WHEN 问题:多个条件的同一部分条件

时间:2021-07-30 15:03:23

标签: postgresql case-when

我有一些用户需要根据他们的选择跟踪的路径:默认、后退、前排、移动。

如果一个人选择返回,它必须跟踪默认路径 + 返回路径。

表格应该是这样的:

CODE     PATH
A1       DEFAULT
A2       DEFAULT
A3       DEFAULT
B1       BACK
B2       BACK
D3       BACK
C2       FRONT
C4       FRONT
E2       MOBILE
E5       MOBILE

我需要使用 case when 的结果(必须是 case when 因为我在 Google Data Studio 中查询,所以我不能使用 where 子句)如下:

CODE     PATH
A1       BACK
A2       BACK
A3       BACK
B1       BACK
B2       BACK
D3       BACK
A1       FRONT
A2       FRONT
A3       FRONT
C2       FRONT
C4       FRONT
A1       MOBILE
A2       MOBILE
A3       MOBILE
E2       MOBILE
E5       MOBILE

我试过这个查询,但没有用。

CASE
    WHEN PATH IN ('DEFAULT', 'BACK') THEN 'BACK'
    WHEN PATH IN ('DEFAULT', 'FRONT') THEN 'FRONT'
    WHEN PATH IN ('DEFAULT, ' MOBILE') THEN 'MOBILE'
ELSE NULL
END

有什么线索吗?

1 个答案:

答案 0 :(得分:0)

你将需要

SELECT code, 'BACK' AS path FROM example WHERE path IN ('DEFAULT', 'BACK')
UNION ALL
SELECT code, 'FRONT' AS path FROM example WHERE path IN ('DEFAULT', 'FRONT')
UNION ALL
SELECT code, 'MOBILE' AS path FROM example WHERE path IN ('DEFAULT', 'MOBILE')

SELECT
  code,
  UNNEST(CASE path
    WHEN 'DEFAULT' THEN ARRAY['BACK', 'FRONT', 'MOBILE']
    ELSE ARRAY[path]
  END) AS path
FROM example

或者(也许是最好的)

SELECT
  code,
  trail.result
FROM example
CROSS JOIN (VALUES
  ('DEFAULT', 'BACK'),
  ('BACK', 'BACK'),
  ('DEFAULT', 'FRONT'),
  ('FRONT', 'FRONT'),
  ('DEFAULT', 'MOBILE'),
  ('MOBILE', 'MOBILE')
) AS trail(path, result) USING (path)

仅使用 CASE 表达式无法实现这种重复的行。

相关问题