【发布时间】:2021-03-31 03:32:47
【问题描述】:
我有两张桌子:
table1
the_date | my_id |
02/03/2021,123
02/03/2021, 1234
02/03/2021, 12345
table2
the_date | my_id |seq | txt
02/03/2021, 1234, 1 , 'OK'
02/03/2021, 12345, 1, 'OK'
02/03/2021, 12345, 2, 'HELLO HI THERE'
02/03/2021, 123456, 1, 'Ok'
这是我的代码:
WITH AB AS (
SELECT A1.my_id
FROM DB1.table1 A1 , DB1.MSG_REC A2 WHERE
A1.my_id=A2.my_id
),
BC AS (
SELECT AB.the_date
COUNT ( DISTINCT (CASE WHEN (TXT like '%OK%') THEN AB.my_id ELSE NULL END )) AS
CASE1 ,
COUNT ( DISTINCT (CASE WHEN (TXT like '%HELLO HI THERE%') THEN AB.my_id ELSE NULL END )) AS
CASE2
FROM AB left JOIN DB1.my_id BC ON AB.my_id =BC.my_id
源于上面的问题是我在值“12345”上循环了两次,因为它满足两个 case 语句。
这会在捕获计数指标时导致数据重复。有没有办法执行第一种情况,然后执行第二种情况,但排除从第一种情况循环任何“my_id”记录。
例如,当需要运行上述脚本并执行第一个案例时,它将获取以下记录并且计数为 3
02/03/2021, 1234, 1 , 'OK'
02/03/2021, 12345, 1, 'OK'
02/03/2021, 123456, 1, 'Ok
第二种情况应该只循环下面的记录,计数只有 1
02/03/2021, 12345, 2, 'HELLO HI THERE'
如果我不创造条件来规避这个问题,CASE1 将是 4,CASE2 会是 2。有什么提示或建议吗?
【问题讨论】:
-
此查询需要一些工作 - 1) 列“the_date”在公用表表达式 (cte) AB 中不合格,2) cte BC 需要幻列 the_date 上的“group by”子句(参见1) - 3) cte BC 需要关闭 - 4) 语句需要以 select * from BC 5) 在 cte AB 中 - “table2”是否意味着 MSG_REC ?