Несколько количеств в рамках единственного SQL-запроса

Вот vbs сценарий, который был передан мне:

Set servicelist = GetObject("winmgmts:").InstancesOf ("Win32_Service")

for each service in servicelist
    sname = lcase(service.name)
    If sname = "NameOfMyService" Then 
        msgbox(sname)
        service.delete ' the internal name of your service
    end if
next
12
задан Das123 13 August 2009 в 01:53
поделиться

2 ответа

@ VoteyDisciple ответ находится на правильном пути, но его запрос требует некоторых улучшений:

SELECT c.id, c.title,
    SUM(ts1.section_id = 1) AS doc1,
    SUM(ts1.section_id = 2) AS doc2,
    SUM(ts1.section_id = 3) AS doc3,
    SUM(ts1.section_id = 4) AS doc4
FROM category AS c
  LEFT JOIN category_link_section AS ts1
    ON (c.id = ts1.category_id)
GROUP BY c.id;

Пояснения:

  • IF () выражения являются избыточными, поскольку равенство уже возвращает 1 или 0.
  • Выньте ts1.section_id = 1 из условия соединения, иначе вы никогда не получите других значений section_id .
  • Группировать только по c.id . Я предполагаю, что OP хочет только одну строку для каждой категории и столбцы для количества каждого значения section_id для соответствующей категории. Если запрос сгруппирован по c.id, ts1.section_id , то будет до четырех строк на категорию.
  • Переместите запятые в списке выбора. Запятые, плавающие в начале строки, выглядят некрасиво. ; -)
26
ответ дан 2 December 2019 в 04:43
поделиться

Вы можете попробовать что-то вроде этого:

SELECT
    category.id
    , category.title
    , SUM(IF(ts1.section_id = 1, 1, 0)) AS doc1
    , SUM(IF(ts1.section_id = 2, 1, 0)) AS doc2
    , SUM(IF(ts1.section_id = 3, 1, 0)) AS doc3
    , SUM(IF(ts1.section_id = 4, 1, 0)) AS doc4
FROM
    category 
    LEFT JOIN category_link_section AS ts1
        ON (category.id = ts1.category_id AND ts1.section_id = 1)
GROUP BY category.id, ts1.section_id
6
ответ дан 2 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: