SQL количество (отличное) - PullRequest
       4

SQL количество (отличное)

0 голосов
/ 30 апреля 2020

Нужна помощь с количеством (отличных), я пытаюсь отобразить количество различных (MG) предметов

    SELECT DISTINCT TOP (50)
    O.ID,
    O.salesarboristidyominame AS Arborist,
    CASE A.accountcategorycode
        WHEN '200000' THEN 'Prospect'
        WHEN '200001' THEN 'Client'
    END AS Category,
    CASE O.proposaltype
        WHEN '1' THEN 'Standard'
        WHEN '2' THEN 'Renewal'
    END AS Proposal_Type,
    O.name AS Opportunity_Number,
    O.proposaldate AS Proposal_Date,
    CASE O.statecode
        WHEN '0' THEN 'Open'
        WHEN '1' THEN 'Won'
        WHEN '2' THEN 'Lost'
    END AS Status,
    O.estimatedvalue,
    O.soldtotal,
    O.unsoldtotal,
    **Count(distinct P.hierarchypath) AS MG_Count**
FROM d365prd_opportunity O
JOIN d365prd_account A
    ON O.soldtoid = A.Id
JOIN d365prd_opportunityproduct OP
    ON O.opportunityid = OP.opportunityid
JOIN d365prd_product P
    ON OP.opportunityproductid = P.productid
WHERE O.proposaldate > '2020-01-01 00:00:00.000'

Сообщение 8120, Уровень 16, Состояние 1, Строка 2 Столбец 'd365prd_opportunity.Id 'недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Обновление Я пытаюсь объединить COUNT с основным запросом. Для этого конкретного примера c основной запрос возвращает 7 строк, все строки принадлежат 1 МГ. Запрос количества возвращает значение 1, которое является правильным. Мне просто нужно добавить этот COUNT в основной запрос, может быть, как подзапрос?

См. Скриншоты ниже:

Основной запрос Количество запросов

1 Ответ

0 голосов
/ 30 апреля 2020

Вам не хватает group by в вашем запросе. всякий раз, когда вы используете агрегатные функции, такие как count, sum, avg, вы должны делать group by неагрегированных столбцов. Добавьте следующий код после предложения where.

group by
    O.ID,
    O.salesarboristidyominame,
    CASE A.accountcategorycode
        WHEN '200000' THEN 'Prospect'
        WHEN '200001' THEN 'Client'
    END
    CASE O.proposaltype
        WHEN '1' THEN 'Standard'
        WHEN '2' THEN 'Renewal'
    END,
    O.name,
    O.proposaldate,
    CASE O.statecode
        WHEN '0' THEN 'Open'
        WHEN '1' THEN 'Won'
        WHEN '2' THEN 'Lost'
    END,
    O.estimatedvalue,
    O.soldtotal,
    O.unsoldtotal
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...