2012-02-26 2 views
3

enter image description hereГраф заявления с регистрацией и где пункт

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

ответ

5
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)

+0

Это хороший :) –

+0

волшебство создано :) –

1

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

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); 
+0

Причина, по которой я переживаю всю эту проблему: мне не нужно писать этот скрипт +, я присоединяюсь к этой таблице, потому что я не уверен в коде маршрута и следовательно, принося их из таблицы маршрутов. Не уверен, что ваш сценарий - лучший способ пойти ... должен быть более простой способ. .. но THX для усилий :) –

+0

О, я пропустил точку соединения ... кажется очевидным сейчас. И да, это грязно. Я думаю, что Эд Харпер делает то, что вы хотите, и намного проще. – gangreen

Смежные вопросы