Считать оператор с помощью Join и оператором where - PullRequest
3 голосов
/ 26 февраля 2012

enter image description here

Два верхних являются индивидуальными результатами. третий - это оператор, в котором я пытаюсь присоединиться к другой таблице. Моя проблема в том, что я не могу установить условия в операторе sql. В последнем операторе соединения я получил два столбца с идентификатором маршрута и суммой с Flab = 1, но не могу установить условие, при котором флаг = 0 .. пожалуйста, помогите Мне нужен T2 в качестве последнего столбца.

Ответы [ 2 ]

5 голосов
/ 26 февраля 2012
SELECT a.RouteCode, 
       SUM(CASE WHEN b.ScheduledFlag = '1' THEN 1 ELSE 0 END) AS T1,
       SUM(CASE WHEN b.ScheduledFlag = '0' THEN 1 ELSE 0 END) AS T2
FROM Routes a inner join CustomerVisits as b on a.RouteCode = b.RouteCode
WHERE b.RouteStartDate = '12/15/2011' 
and a.DepotCode = '6'
group by a.RouteCode

Обратите внимание, что ваша строка формата даты потенциально неоднозначна в зависимости от локали вашего подключения к базе данных.Используйте безопасный для даты формат даты, такой как ODBC canonical (yyyy-mm-dd hh:mi:ss)

1 голос
/ 26 февраля 2012

Один из способов сделать это состоит в том, чтобы создать каждый запрос на подсчет отдельно, а затем выполнить левое объединение из таблицы маршрутов для каждого, чтобы ваши результаты не фильтровались, если в обеих таблицах подсчета нет совпадений.

SELECT q1.routecode,
       t1,
       t2
FROM   routes
       LEFT JOIN (SELECT routecode,
                         COUNT(routecode) AS t1
                  FROM   customervisits
                  WHERE  ( routecode IN ( '701', '702', '704', '703', '705' ) )
                         AND routestartdate = '12/15/2011'
                         AND schelduledflag = '1'
                  GROUP  BY routecode) AS q1
         ON routes.routecode = q1.routecode
       LEFT JOIN (SELECT routecode,
                         COUNT(routecode) AS t2
                  FROM   customervisits
                  WHERE  ( routecode IN ( '701', '702', '704', '703', '705' ) )
                         AND routestartdate = '12/15/2011'
                         AND schelduledflag = '0'
                  GROUP  BY routecode) AS q2
         ON routes.routecode = q2.routecode
WHERE  a.depotcode = '6'  and (t1 is not null or t2 is not null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...