如何检查联接表中的所有帖子是否在列中具有相同的值?

时间:2011-11-25 12:54:57

标签: sql visual-studio sql-server-2008-r2 business-intelligence

我正在为客户构建BI报告,其中涉及1-n相关联接。 联接表有一个员工ID字段(EmplId)。

如果所有相关帖子在EmplId字段中都有相同的员工,那么我为此报告构建的查询应该在其字段“OneEmployee”中给出1,如果是不同的员工,则为null,即:

TaskTrans
    TaskTransHours > EmplId: 'John'
    TaskTransHours > EmplId: 'John'

这应该在查询

中的所述字段中给出1
TaskTrans
    TaskTransHours > EmplId: 'John'
    TaskTransHours > EmplId: 'George'

这应该将所述字段留空

这个想法是创建一个case函数检查它并返回正确值的字段。但我的问题是,有一种方法可以通过SQL检查这一点。

2 个答案:

答案 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 …