Подсчитать отдельный случай, когда SQL - PullRequest
1 голос
/ 08 марта 2019

Интересно, можно ли мне немного помочь?Я все еще новичок в SQL, и я учусь с каждым днем, пытаясь делать что-то более сложное каждый день.

У меня есть набор данных, в котором есть дубликаты номеров заказов.Исходя из этого, я хочу сделать две вещи: во-первых, я рассчитываю на подсчет количества уникальных номеров заказов, а затем, во-вторых, сумму всех номеров заказов.

Мне удалось выполнить вторую часть этого, но у меня возникли некоторые трудности с выполнением Подсчета различных номеров заказов.

Пожалуйста, см. Ниже мой запрос, я знаю, что мои объединения не верны, верносейчас, как я буду работать над ними позже.Я работаю с ODBC progress v10 и использую диспетчер запросов Microsoft для извлечения, а затем вручную пишу код в блокноте и перехожу обратно в Excel, поскольку в настоящее время моя компания не может получить SSMS.

SELECT 
    Company_0.CoaCompanyName,
    SopOrder_0.SooOrderDate,
    COUNT(DISTINCT CASE WHEN SopOrder_0.SooOrderNumber = SopOrder_0.SooOrderNumber THEN 1 ELSE 0 END) AS 'Orders',
    SUM(CASE WHEN SopOrder_0.SooOrderNumber IS NOT NULL THEN 1 ELSE 0 END) AS 'Order Items',
    SopOrderItem_0.SoiValue,
    SopOrder_0.SooParentOrderReference
FROM 
    SBS.PUB.Company Company_0,
    SBS.PUB.SopOrder SopOrder_0,
    SBS.PUB.SopOrderItem SopOrderItem_0
WHERE 
    SopOrder_0.SopOrderID = SopOrderItem_0.SopOrderID 
    AND Company_0.CompanyID = SopOrder_0.CompanyID
    AND SopOrder_0.SooOrderDate > '2019-01-01'

Текущийданные выглядят как

Company Name           Order Numbers    
-------------------------------------
CompanyA                 Orderno1
CompanyA                 Orderno1
CompanyB                 Orderno2
CompanyB                 Orderno3
CompanyB                 Orderno3
CompanyB                 Orderno3

Как я хочу, чтобы они выглядели:

Company Name           Orders         Order Items
-------------------------------------------------
CompanyA                 1                2
CompanyB                 2                4

1 Ответ

1 голос
/ 08 марта 2019

Вы можете использовать count (distinct..), count(*) и group by

    SELECT 
        Company_0.CoaCompanyName
        , Count(DISTINCT SopOrder_0.SooOrderNumber ) AS Orders
        , count(*) AS `Order Item`
    FROM SBS.PUB.Company Company_0
    INNER JOIN SBS.PUB.SopOrder SopOrder_0 ON Company_0.CompanyID = SopOrder_0.CompanyID
    INNER JOIN SBS.PUB.SopOrderItem SopOrderItem_0 ON SopOrder_0.SopOrderID = SopOrderItem_0.SopOrderID 
    WHERE SopOrder_0.SooOrderDate > '2019-01-01'
    GROUP BY Company_0.CoaCompanyName 

Для удобства чтения следует использовать явный синтаксис join и избегать старого неявного синтаксиса join, основанного на whereусловие.

В качестве имени составного столбца можно использовать обратные галочки ("`").

...