2015-01-12 4 views
0
SELECT 'Application Developers' as team, COUNT(assignees) as tickets from TABLE20 where status <> 'Closed' AND assignees like '%Application Developers%' HAVING COUNT(assignees) <> 0 UNION ALL 
SELECT 'Desktop Support' AS team, COUNT(assignees) AS tickets FROM TABLE20 WHERE status <> 'Closed' AND assignees LIKE '%Desktop Support%' HAVING COUNT(assignees) <> 0 UNION ALL 
SELECT 'Enterprise Help Desk' AS team, COUNT(assignees) AS tickets FROM TABLE20 WHERE status <> 'Closed' AND assignees LIKE '%Enterprise Help Desk%' HAVING COUNT(assignees) <> 0 UNION ALL 
SELECT 'Network Management' AS team, COUNT(assignees) AS tickets FROM TABLE20 WHERE status <> 'Closed' AND assignees LIKE '%Network Management%' HAVING COUNT(assignees) <> 0 UNION ALL 
SELECT 'Query Writers' AS team, COUNT(assignees) AS tickets FROM TABLE20 WHERE status <> 'Closed' AND assignees LIKE '%Query Writers%' HAVING COUNT(assignees) <> 0 UNION ALL 
SELECT 'Security' AS team, COUNT(assignees) AS tickets FROM TABLE20 WHERE status <> 'Closed' AND assignees LIKE '%Security%' HAVING COUNT(assignees) <> 0 UNION ALL 
SELECT 'Server Admins' AS team, COUNT(assignees) AS tickets FROM TABLE20 WHERE status <> 'Closed' AND assignees LIKE '%Server Admins%' HAVING COUNT(assignees) <> 0 UNION ALL 

ORDER BY tickets DESC 

Этот запрос выдает следующий результат:Как я могу переписать этот запрос более эффективным способом?

team   tickets 
Desktop Support 424 
Enterprise Help Desk 96 
Server Admins  46 
Query Writers  15 
Network Management 13 
Application Developers 6 
Security  6 

Как я могу переписать этот запрос, поэтому он не выглядит как полный NEWB написал? =)

+3

Для чего нужна эта база данных? Почему вы не можете использовать группу? – OldProgrammer

+7

Этот вопрос кажется не по теме, потому что речь идет о просмотре рабочего кода. Он должен быть опубликован на http://codereview.stackexchange.com/ –

+2

Вне темы, да, но это не должно продолжаться в Code Review без [существенного улучшения] (http://codereview.stackexchange.com/questions/tagged/ SQL). – Air

ответ

0

Будет ли это делать?

SELECT assignees, count(*) as tickets 
FROM TABLE20 
WHERE status <> 'Closed' 
GROUP BY assignees 
ORDER BY tickets DESC 
+0

И я говорю то же самое, пожалуйста, прокомментируйте! – jarlh

+1

Я не спустил вниз, но я предполагаю, что 'assignees' не является точной строкой, и именно поэтому они используют' LIKE'. –

+0

Согласитесь с Goat CO здесь, поскольку похоже, что у вас могут быть «Настольная поддержка, разработчики приложений» у правопреемников. – Andez

2

Если это база данных, которая поддерживает cte вы можете использовать:

;WITH cte AS(SELECT CASE WHEN assignees like '%Application Developers%' THEN 'Application Developers' 
         WHEN assignees LIKE '%Desktop Support%' THEN 'Desktop Support' 
         .... 
        END AS team 
      FROM TABLE20 
      WHERE [status] <> 'Closed' 
      ) 
SELECT team,COUNT(*) CT 
FROM cte 
GROUP BY team 
HAVING COUNT(*) > 0 

Если нет:

SELECT CASE WHEN assignees like '%Application Developers%' THEN 'Application Developers' 
      WHEN assignees LIKE '%Desktop Support%' THEN 'Desktop Support' 
      .... 
     END AS team 
     ,COUNT(*) CT 
FROM TABLE20 
WHERE [status] <> 'Closed' 
GROUP BY CASE WHEN assignees like '%Application Developers%' THEN 'Application Developers' 
      WHEN assignees LIKE '%Desktop Support%' THEN 'Desktop Support' 
      .... 
     END 
HAVING COUNT(*) > 0 

GROUP BY является основным элементом SQL, что позволяет точно функциональность вы» повторно после. Вместо того, чтобы независимо рассчитывать группы элементов и комбинировать результаты, вы можете подсчитать все элементы из нескольких групп одним махом.

+0

Пожалуйста, объясните нижний план. –

+0

некоторым людям просто нравится голосовать, когда они не могут понять –

+0

Спасибо Goat CO. Cte отлично работает! Я все еще изучаю SQL и пытаюсь понять различные команды и то, как они работают вместе. В очередной раз благодарим за помощь! – Sung

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