Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подсчет значений  [new]
Marklin
Member

Откуда:
Сообщений: 1
Допустим, есть 2 колонки, CustomerID и BroughtByCustomerID, т.е. ID покупателя и ID того, кем он был приведен
CustomerIDBroughtByCustomerID
1null
21
31
42
54
61
7null
83
94
102

как написать запрос, подсчитывающий сколько покупателей привел этот покупатель?
CustomerIDBroughtCustomers
13
22
31
42
50
60
70
80
90
100
31 окт 19, 23:01    [22007601]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет значений  [new]
londinium
Member

Откуда: Киев
Сообщений: 1165
как-то так
USE master
GO

WITH CTE(CUSTOMERID,BroughtByCustomerID) AS
(
  SELECT 1,NULL
    UNION ALL
  SELECT 2,1
    UNION ALL
  SELECT 3,1
    UNION ALL
  SELECT 4,2
    UNION ALL
  SELECT 5,4
    UNION ALL
  SELECT 6,1
    UNION ALL
  SELECT 7,NULL
    UNION ALL
  SELECT 8,3
    UNION ALL
  SELECT 9,4
    UNION ALL
  SELECT 10,2            
          
),
COUNTBROUGHT AS
(
  SELECT C.BroughtByCustomerID,COUNT(C.BroughtByCustomerID)CNT
  FROM CTE AS C
  GROUP BY C.BroughtByCustomerID
)
SELECT C.CUSTOMERID,ISNULL(BROUGHT.CNT,0)AS COUNTR
FROM CTE AS C
LEFT JOIN COUNTBROUGHT AS BROUGHT ON C.CUSTOMERID=BROUGHT.BroughtByCustomerID
31 окт 19, 23:19    [22007602]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет значений  [new]
Андрей Юниор
Member

Откуда: Москва
Сообщений: 497
Начать с этого:
select BroughtByCustomerID as CustomerID, count(CustomerID) as cnt_BroughtByCustomerID
from table
where BroughtByCustomerID is not null
group BroughtByCustomerID

В принципе готово, но если нужно нужно ещё нули подставить тем CustomerID, которые никого не привели, то можно ещё что-нибудь добавить любым удобным способом.


londinium
WITH CTE(CUSTOMERID,BroughtByCustomerID) AS
(
  SELECT 1,NULL
    UNION ALL
  SELECT 2,1
    UNION ALL
  SELECT 3,1
    UNION ALL
  SELECT 4,2
    UNION ALL
  SELECT 5,4
    UNION ALL
  SELECT 6,1
    UNION ALL
  SELECT 7,NULL
    UNION ALL
  SELECT 8,3
    UNION ALL
  SELECT 9,4
    UNION ALL
  SELECT 10,2            
          
),

Что это? Картинка с другого сайта.
31 окт 19, 23:45    [22007608]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет значений  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36905
Андрей Юниор
Что это? Картинка с другого сайта.
Это обыкновенная уличная магия.
1 ноя 19, 01:09    [22007621]     Ответить | Цитировать Сообщить модератору
 Re: Подсчет значений  [new]
Андрей Юниор
Member

Откуда: Москва
Сообщений: 497
Гавриленко Сергей Алексеевич
Это обыкновенная уличная магия.

Устал, не сразу понял Картинка с другого сайта.
1 ноя 19, 06:20    [22007656]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить