【发布时间】:2018-08-24 09:50:17
【问题描述】:
我希望这有助于解释比标题更多的内容。基本上我有一个疑问:
SELECT
e.USER
, e.CODE
, CASE WHEN
e.CODE IN ('a.01', 'b.04', 'c.20', x.01)
THEN 1
ELSE NULL
END AS case
FROM TABLE e
这会吸引我:
USER CODE case
01 a.01 1
01 a.02 NULL
01 a.04 NULL
01 b.04 1
01 c.20 1
02 a.11 NULL
02 b.04 1
03 b.05 NULL
04 c.20 1
但是,我需要的有点复杂。我需要将代码分组,以便为每个用户的每个组提供一个值 USER:
例如:
, CASE WHEN
e.CODE IN ('a.01', 'b.04') --Group A
OR
e.CODE IN ('c.20', x.01) --Group B
THEN 1
ELSE NULL
END AS case
上面的代码是错误的,因为我需要的是如果 GROUP A 或 GROUP B 中的至少一个代码存在于用户中,那么只给出一个值 1 ELSE NULL。
会产生的东西:
USER CODE case
01 a.01 1 --Group A
01 a.02 NULL
01 a.04 NULL
01 b.04 NULL --GROUP A, now NULL because we just need to count once per group
01 c.20 1 --GROUP B
02 a.11 NULL
02 b.04 1
03 b.05 NULL
04 c.20 1
如果这有帮助,我最终想计算每个用户的案例以产生以下结果:
USER count
01 2 --Not 3
02 1
03 1
04 1
【问题讨论】:
标签: sql sql-server