Сгенерировать сводную информацию в SQL (объем продаж по отделам по часам) - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь сгенерировать Pivot в SQL, но не могу сделать это

**** Это то, чего я пытаюсь достичь: ****

Определите, сколько было общей продажной стоимостью (Sum of Value) на отдел (1-99) в течение определенного периода, на основе временных интервалов (1 час).

Примечание В некоторые дни Магазин открывается после полуночи, и нам нужно ежедневно регистрировать продажи на следующий день до 2 часов ночи. Как мне включить это в мой запрос

Это ожидаемый PIVOT https://imgur.com/a/p00FlAT

Это сгенерированные данные https://imgur.com/a/A7hYJXi

Из сгенерированных данных мне нужно написать запрос для построения PIVOT

Это мой запрос

select * from
(
SELECT  
case 
when [Time] between '1754-01-01 07:00:00.000' and '1754-01-01 07:59:59.999' then '07am - 07:59am'
when [Time] between '1754-01-01 08:00:00.000' and '1754-01-01 08:59:59.999' then '08am - 08:59am'
when [Time] between '1754-01-01 09:00:00.000' and '1754-01-01 09:59:59.999' then '09am - 09:59am'
when [Time] between '1754-01-01 10:00:00.000' and '1754-01-01 10:59:59.999' then '10am - 10:59am'
when [Time] between '1754-01-01 11:00:00.000' and '1754-01-01 11:59:59.999' then '11am - 11:59am'
when [Time] between '1754-01-01 12:00:00.000' and '1754-01-01 12:59:59.999' then '12pm - 12:59pm'
when [Time] between '1754-01-01 13:00:00.000' and '1754-01-01 13:59:59.999' then '13pm - 13:59pm'
when [Time] between '1754-01-01 14:00:00.000' and '1754-01-01 14:59:59.999' then '14pm - 14:59pm'
when [Time] between '1754-01-01 15:00:00.000' and '1754-01-01 15:59:59.999' then '15pm - 15:59pm'
when [Time] between '1754-01-01 16:00:00.000' and '1754-01-01 16:59:59.999' then '16pm - 16:59pm'
when [Time] between '1754-01-01 17:00:00.000' and '1754-01-01 17:59:59.999' then '17pm - 17:59pm'
when [Time] between '1754-01-01 18:00:00.000' and '1754-01-01 18:59:59.999' then '18pm - 18:59pm'
when [Time] between '1754-01-01 19:00:00.000' and '1754-01-01 19:59:59.999' then '19pm - 19:59pm'
when [Time] between '1754-01-01 20:00:00.000' and '1754-01-01 20:59:59.999' then '20pm - 20:59pm'
when [Time] between '1754-01-01 21:00:00.000' and '1754-01-01 21:59:59.999' then '21pm - 21:59pm'
when [Time] between '1754-01-01 22:00:00.000' and '1754-01-01 22:59:59.999' then '22pm - 22:59pm'
when [Time] between '1754-01-01 23:00:00.000' and '1754-01-01 23:59:59.999' then '23pm - 23:59pm'
when [Time] between '1754-01-01 00:00:00.000' and '1754-01-01 00:59:59.999' then '24am - 24:59am'

End [Time Slot],
[Company A$Sales Entries].[Total Rounded Amt_]*-1 ,
[Company A$Item].[Department No_] as Department
FROM            [Company A$Sales Entries] INNER JOIN
                         [Company A$Item] ON [Company A$Sales Entries].[Item No_] = [Company A$Item].No_
WHERE        [Company A$Sales Entries].Date BETWEEN '2017-06-05' AND  '2017-06-06'
and [Company A$Item].[Department No_] in (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,50,60,92,93,94,95,96,97,99)

and [POS Terminal] in ('01','02','03','04','05','06','07','08','09','10','11','12')

))as P

        PIVOT (SUM([Company A$Sales Entries].[Total Rounded Amt_])
         for Department in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[50],[60],[92],[93],[94],[95],[96],[97],[99]
                                  )as PVT;

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018
SELECT SalesValue, Department, Period
FROM (
SELECT SalesValue, Department, Period
FROM <table>) up
PIVOT (SUM(Sales) FOR SalesValue IN (Department, Period)) AS pvt
ORDER BY Period

Пожалуйста, обратитесь к следующей ссылке для получения дополнительной помощи: https://blog.sqlauthority.com/2008/06/07/sql-server-pivot-and-unpivot-table-examples/

0 голосов
/ 10 сентября 2018

Без хороших структур таблиц, примеров данных и ожидаемого вывода трудно дать более точный ответ

Самый простой способ SQL в PIVOT, при котором вся поддержка DMBS - это использование этой конструкции.

SELECT 
   column
 , MAX(CASE WHEN column = 'value' THEN column ELSE NULL) AS column_name
 , MAX(CASE WHEN column = 'value' THEN column ELSE NULL) AS column_name
 ...
 ...
FROM
 table 
GROUP BY 
 column
ORDER BY
 column
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...