我正在为客户构建BI报告,其中涉及1-n相关联接。 联接表有一个员工ID字段(EmplId)。
如果所有相关帖子在EmplId字段中都有相同的员工,那么我为此报告构建的查询应该在其字段“OneEmployee”中给出1,如果是不同的员工,则为null,即:
TaskTrans
TaskTransHours > EmplId: 'John'
TaskTransHours > EmplId: 'John'
这应该在查询
中的所述字段中给出1TaskTrans
TaskTransHours > EmplId: 'John'
TaskTransHours > EmplId: 'George'
这应该将所述字段留空
这个想法是创建一个case函数检查它并返回正确值的字段。但我的问题是,有一种方法可以通过SQL检查这一点。
答案 0 :(得分:0)
select not count(*) from your_table
where employee_id = GIVEN_ID
and your_field not in ( select min(your_field)
from your_table
where employee_id = GIVEN_ID);
注意:我的第一个想法是在内部查询中使用LIMIT 1
,但是MYSQL不喜欢它,所以最小的是 - 使用any的点,但只有一个。 Min应该可以工作,但是该字段应该被编入索引,然后这个查询实际上会执行得相当快,因为只使用索引(显然employee_id也应该被编入索引)。
注意2:不要在not
前面与count(*)
混淆,当没有不同的时候你想要1,我会计算不同的,然后给你{{1}如果count为0,则为1,否则为0。
答案 1 :(得分:0)
似乎是window COUNT()
的作业:
SELECT
…,
CASE COUNT(DISTINCT TaskTransHours.EmplId) OVER () WHEN 1 THEN 1 END
AS OneEmployee
FROM …