Как проверить, все ли записи в объединенной таблице имеют одинаковое значение в столбце? - PullRequest
0 голосов
/ 25 ноября 2011

Я создаю отчет BI для клиента, в котором задействовано 1-n связанное объединение.В объединенной таблице есть поле для идентификатора сотрудника (EmplId).

В запросе, который я построил для этого отчета, предполагается, что в его поле "OneEmployee" будет указано значение 1, если все связанные посты имеют одного сотрудника.в поле EmplId - ноль, если это разные сотрудники, то есть:

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

Это должно дать 1 в указанном поле в запросе

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

Это должно оставить указанное поле пустым

Идея состоит в том, чтобы создать поле, в котором функция case проверяет это и возвращает правильное значение.Но моя проблема в том, что есть способ проверить это через SQL.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2011

Кажется, что работа для окна COUNT():

SELECT
  …,
  CASE COUNT(DISTINCT TaskTransHours.EmplId) OVER () WHEN 1 THEN 1 END
    AS OneEmployee
FROM …
0 голосов
/ 25 ноября 2011
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 это не понравилось, так что минус - точки, которые можно использовать, но только один. Мин должен работать, но поле должно быть проиндексировано, тогда этот запрос будет выполняться довольно быстро, так как будут использоваться только индексы (очевидно, что employee_id также должен быть проиндексирован).

Примечание 2: не запутайтесь с not перед count(*), вы хотите 1, когда нет ни одного, который отличается, я считаю разные, а затем дам вам not count(*), который будет один если число равно 0, иначе 0.

...