Shikha 31 Ответов: 1

Как мне показать отчетливую неделю?


Я выполняю SQL-код, основанный на концепции" Running total".Мой код вычисляет точный текущий итог, но мне нужно показывать текущий итог только после завершения каждой недели, а не по датам.

Что я уже пробовал:

Мой код таков
Select DISTINCT SD1.[Week], SD1.[Allocation], SD1.[Subsidiaries],SD1.[Month],SD1.[Date],(SD1.[Daily Sale]+IsNull(SUM(SD2.[Daily Sale]),0)) as 'Running Total'
from [dbo].[Solar data] SD1 left join [dbo].[Solar data] SD2 on SD1.[Subsidiaries]=SD2.[Subsidiaries]
and SD2.[Date]<SD1.[Date] And SD1.[Month]=SD2.[Month]
where SD1.[Subsidiaries]='WCL' group by SD1.[Allocation],SD1.[Month],SD1.[Subsidiaries],SD1.[Daily Sale],SD1.[Week],SD1.[Date]
order by SD1.[Date]

CHill60

Если вы дадите нам несколько примеров данных, показывающих вашу структуру таблицы (только биты, используемые в этом запросе) и ваши ожидаемые результаты, вам будет гораздо легче помочь

Shikha 31

Распределение Дочерних Компаний Ежедневно Дата Продажи Месяц Неделя
WCL 1075 44.930 2-Jan-2017 Jan-17 Week1
WCL 1075 44.510 3-Jan-2017 Jan-17 Week1
WCL 1075 53.680 8-Jan-2017 Jan-17 Week2
WCL 1075 41.450 9-Jan-2017 Jan-17 Week2
WCL 1075 40.970 15-Jan-2017Jan-17 Week3
WCL 1075 55.900 16-Jan-2017Jan-17 Week3
WCL 1075 43.890 22-Jan-2017Jan-17 Week4
WCL 1075 44.360 23-Jan-2017Jan-17 Week4
WCL 1075 35.130 29-Jan-2017Jan-17 Week5
Это примерные данные.Мне нужно показать отчетливую "недельную" совокупную сумму[ожидаемый результат], например:-
Неделю нарастающим итогом
Week1 89.44
Week2 184.57
Week3 281.44
Week4 369.69
Week5 404.82

1 Ответов

Рейтинг:
1

RAMASWAMY EKAMBARAM

Вы можете использовать аналитический запрос (что-то вроде этого):
выберите < другие столбцы>,
случай, когда sale_date = max_week_date convert_to_string (week_sale) else " end week_sale
от
(
выберите < другие столбцы>,
сумма(daily_sale) над (раздел по годам, неделю заказ по sale_date) week_sale,
max (sale_date) over (раздел по годам, неделям) max_week_date
) ля

Поскольку вам нужна только общая сумма за неделю (а не текущая сумма за каждый день недели), вам даже не нужно кодировать "order by sale_date".
Подставьте функции SQL-сервера для вычисления года, недели (от даты продажи до даты продажи) и преобразования числа в строку.


CHill60

Что такое "max_week_date convert_to_string" и зачем вам вообще преобразовывать его в строку?

RAMASWAMY EKAMBARAM

Рассмотрим записи за период 21-Май-2017 .. 10-июнь-2017
период 21-Май-2017 .. 27-май-2017 - это неделя 21 2017 года
Период 28-май-2017 .. 03-июнь-2017 - это неделя 22 2017 года
Период 04-июнь-2017 .. 10-июнь-2017 - это 23-я неделя 2017 года

max_week_date для:
21-Май-2017 .. 27-май-2017 - это 27-май-2017
28-май-2017 .. 03-июнь-2017 - это 03-июнь-2017
04-jun-2017 .. 10-jun-2017 - это 10-jun-2017

Человек, отправляющий запрос, хочет получить еженедельный накопительный отчет только за последний день недели (завершение недели).
Как мы используем случай, когда sale_date = max_week_date ..
нам нужно преобразовать week_sale (который является числовым) в строку, иначе мы не сможем отобразить пробел ( " ) в других случаях (совместимость типов).

CHill60

Другими словами, ответ на мой вопрос заключается в том, что max_week_date_convert_to_string-это функция, которую вы написали и преобразуете в строку в слое данных, чтобы слой UK выглядел красиво.