Считать группу в SQL - PullRequest
0 голосов
/ 25 марта 2019

Мне нужно создать запрос, который насчитывает предложение GROUP BY. В частности, над столбцами Order_ID и SUB_ID и подсчитывает количество Product_IDs на Order_ID и SUB_ID.

Это должно выглядеть так:

enter image description here

Тем не менее, данные настроены немного странно, и единственный способ получить информацию (конечно, за исключением столбца Count) с помощью:

SELECT
    tbl1.Order_Id
    ,tbl1.Sub_Id
    ,tbl1.Product_Id
    ,tbl1.Product_Value
    ,tbl2.Product_Owner
    ,tbl2.Owner_Id

FROM
tbl1 AS tbl1
LEFT OUTER JOIN
    tbl2 AS tbl2 ON tbl1.Order_Id=tbl2.Order_Id AND tbl1.Sub_Id=tbl2.Sub_Id

Как бы я добавил такой столбец?

1 Ответ

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

Я думаю, вам просто нужно GROUP BY:

SELECT tbl1.Order_Id, tbl1.Sub_Id,
       COUNT(tbl1.Product_Id)
FROM tbl1 LEFT OUTER JOIN
     tbl2
     ON tbl1.Order_Id = tbl2.Order_Id AND tbl1.Sub_Id = tbl2.Sub_Id
GROUP BY tbl1.Order_Id, tbl1.Sub_Id;

Поскольку запрос возвращает строки только из tbl1 и использует LEFT JOIN, вы должны иметь возможность:

SELECT tbl1.Order_Id, tbl1.Sub_Id,
       COUNT(tbl1.Product_Id)
FROM tbl1 
GROUP BY tbl1.Order_Id, tbl1.Sub_Id;

РЕДАКТИРОВАТЬ:

Я вижу, это пример данных.В этом случае вы, вероятно, просто хотите row_number():

SELECT tbl1.Order_Id, tbl1.Sub_Id, tbl1.Product_Id, tbl1.Product_Value,
       tbl2.Product_Owner, tbl2.Owner_Id
       ROW_NUMBER() OVER (PARTITION BY tbl1.Order_Id, tbl1.Sub_Id ORDER BY tbl1.Product_Id) as seqnum
FROM tbl1 LEFT OUTER JOIN
     tbl2 
     ON tbl1.Order_Id = tbl2.Order_Id AND
        tbl1.Sub_Id = tbl2.Sub_Id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...