Среднее, общее и транспонированное - PullRequest
0 голосов
/ 06 июня 2018

У меня есть этот запрос ниже:

SELECT distinct COUNT(Status) AS [Transactions], sender AS [Supplier],
left(DATENAME(mm, Date_Reported), 3) AS Month, DATENAME(yyyy, Date_Reported) AS Year
 FROM TX
 and Date_Reported >= DATEADD(MONTH, -13, CAST(GETDATE() AS DATE))
GROUP BY DATENAME(mm, Date_Reported), DATENAME(yyyy, Date_Reported), sender
ORDER BY sender, Year, Month DESC;

Это дает мне таблицу, как показано ниже:

TX | Supplier | Month | Year

Теперь выше может иметь X строк с одним и тем же поставщиком и связанным значениемс этим, как показано ниже:

**TX | Supplier | Month | Year**
1  | A        | Oct   | 2017
5  | A        | Jan   | 2017
3  | A        | Mar   | 2018
2  | A        | Sep   | 2017

Это относится ко всем поставщикам, поэтому вместо длинной таблицы с множеством строк мне нужны отдельные поставщики и их значения в краткой таблице, как показано ниже:

Supplier | May 17 | Jun 17 | Jul 17 ... | May 18 | 

Я также хотел бы добавить два дополнительных столбца: среднее значение за последние 13 месяцев (т.е. с 17 мая по 18 мая), а также общее количество за последние 13 месяцев, поэтому итоговая таблица должна выглядеть следующим образом:

Supplier | May 17 | Jun 17 | Jul 17 ... | May 18 | Average | Total

Я ценю, что спрашиваю много, но я надеюсь, что кто-то может помочь мне с ОДНОМ ЕДИНСТВЕННЫМ запросом, который может сделать ВСЕ из вышеперечисленного.

Заранее благодарю :)

1 Ответ

0 голосов
/ 06 июня 2018

Вы должны сделать что-то вроде этого:

SELECT sender AS [Supplier],
   SUM(CASE WHEN MONTH(Date_Reported) = 5 AND YEAR(Date_Reported) = 2017  THEN 1 ELSE 0 END) AS [May 17],
   SUM(CASE WHEN MONTH(Date_Reported) = 6 AND YEAR(Date_Reported) = 2017  THEN 1 ELSE 0 END) AS [Jun 17]
GROUP BY sender
ORDER BY sender
...