Группировать по в sql подзапросе - PullRequest
0 голосов
/ 28 мая 2020

Итак, у меня есть запрос, в котором я пытаюсь накопить количество заказов для телефона и веб-сайта, однако я понимаю, что вы не можете использовать предложение GROUP BY в подзапросе, когда оно находится непосредственно внутри выбора, поскольку оно возвращает более одного значения. Поэтому мой вопрос в том, где мне разместить подзапросы, чтобы добиться того же результата.

SELECT CAST(a.DateCreated AS DATE), 
        (SELECT count(CAST(DateCreated AS DATE))
         FROM [Sterlingbuild].[dbo].[CustomerOrder]
         WHERE BookingSourceId = 1
         GROUP BY CAST(DateCreated AS DATE)) AS 'Website',
         (SELECT count(CAST(DateCreated AS DATE))
         FROM [Sterlingbuild].[dbo].[CustomerOrder]
         WHERE BookingSourceId = 2
         GROUP BY CAST(DateCreated AS DATE)) AS 'Phone'
  , count(CAST(a.DateCreated AS DATE)) AS 'Total Orders'
  FROM [Sterlingbuild].[dbo].[CustomerOrder] a
  WHERE CustomerOrderStatusId = 7
  AND DepartmentId = 1
  GROUP BY CAST(a.DateCreated AS DATE)
  ORDER BY CAST(a.DateCreated AS DATE)

Когда я запускаю этот запрос, он работает, поэтому я знаю, что данные верны:

  SELECT count(CAST(DateCreated AS DATE))
     FROM [Sterlingbuild].[dbo].[CustomerOrder]
     WHERE BookingSourceId = 1
     AND CustomerOrderStatusId = 7 AND DepartmentId = 1
     GROUP BY CAST(DateCreated AS DATE)

1 Ответ

2 голосов
/ 28 мая 2020

Полагаю, вам нужно условное агрегирование:

SELECT CAST(co.DateCreated AS DATE), 
       SUM(CASE WHEN BookingSOurceId = 1 THEN 1 ELSE 0 END) as Website,
       SUM(CASE WHEN BookingSOurceId = 2 THEN 1 ELSE 0 END) as Phone,
       COUNT(*) as Total_Orders
FROM [Sterlingbuild].[dbo].[CustomerOrder] co
WHERE CustomerOrderStatusId = 7 AND DepartmentId = 1
GROUP BY CAST(a.DateCreated AS DATE)
ORDER BY CAST(a.DateCreated AS DATE)
...