Как разбить результаты запроса продаж по дням

У меня есть запрос продаж по диапазону дат, где диапазон дат определяется пользовательским вводом. Я хотел бы разделить результаты по дням. то есть: скажем, пользователь вводит диапазон дат с 01.01.16 по 15.01.16, я хотел бы разбить результаты на каждый день. Я использую DATENAME(DD,T1.[DocDate]), чтобы сломать его, и он работает, но результаты неточны. Я полагаю, что мне нужно использовать тот же разрыв в подзапросе Returns. См. полный запрос ниже:

Спасибо

SELECT
'2016' as 'Year',
t4.remarks as 'Department',
DATENAME(DD,T1.[DocDate]) as 'Day',
sum(t0.[quantity])-(ISNULL(p.quantity,0)) as 'Quantity',
sum(t0.linetotal - t0.linetotal*t1.discprcnt/100)-(ISNULL(p.total,0)) as 'Total',
sum(T0.[GrssProfit])-(ISNULL(p.profit,0)) as 'Profit $',
(sum(T0.[GrssProfit])-(ISNULL(p.profit,0)))/(sum(t0.linetotal - t0.linetotal*t1.discprcnt/100)-(ISNULL(p.total,0)))*100 as 'Profit%'

FROM INV1 T0 with (nolock)
INNER JOIN OINV T1 with (nolock) on t0.docentry = t1.docnum
INNER JOIN OSLP T2 with (nolock) on t0.SlpCode = t2.SlpCode 
LEFT JOIN OHEM T3 with (nolock) on t0.slpcode = t3.SalesPrson 
LEFT JOIN OUDP T4 with (nolock)  on t3.dept = t4.Code

--BEGINS QUERY FOR THE RETURNS-- 
left join (select t9.name as 'dept',sum(t5.quantity) as 'quantity',sum(t5.linetotal - t5.linetotal*t6.discprcnt/100) as 'total',sum(t5.grssprofit) as 'profit'
from [dbo].[rin1] t5 with (nolock)
inner join orin t6 with (nolock) on t5.docentry = t6.docentry
INNER JOIN OSLP T7 with (nolock) on t5.SlpCode = t7.SlpCode 
LEFT JOIN OHEM T8 with (nolock) on t5.slpcode = t8.SalesPrson 
LEFT JOIN OUDP T9 with (nolock) on t8.dept = t9.Code
INNER JOIN OITM T10 with (nolock) on t5.itemcode = t10.itemcode
where t5.docdate between '[%1]' and '[%2]' and t10.invntitem = 'Y'
and (t5.linetotal - (t5.linetotal*t6.discprcnt/100)) <> '0'
group by t9.name) p on p.dept = t4.name
--ENDS QUERY FOR THE RETURNS-- 

WHERE t1.docdate between '[%1]' and '[%2]'
and t4.remarks is not null
and t4.remarks = 'perfume provider'
and (t0.linetotal - (t0.linetotal*t1.discprcnt/100)) <> '0'

group by DATENAME(DD,T1.[DocDate]),t4.remarks,p.quantity,p.total,p.profit

person Cesar Augusto    schedule 05.01.2017    source источник
comment
Пожалуйста, отредактируйте свой вопрос, чтобы включить текущий запрос и желаемые результаты, а для тех из нас, у кого не установлен Sap B1, также поделитесь DDL соответствующей таблицы и некоторыми примерами данных в виде DML.   -  person Zohar Peled    schedule 05.01.2017
comment
Вот отличное место для начала. spaghettidba.com /2015/04/24/   -  person Sean Lange    schedule 05.01.2017
comment
Спасибо. Я только что отредактировал и добавил полный запрос и некоторые дополнительные сведения.   -  person Cesar Augusto    schedule 05.01.2017
comment
@CesarAugusto Также было бы неплохо, если бы вы могли немного почистить свой код, чтобы он был читабельным ...   -  person iamdave    schedule 05.01.2017


Ответы (1)


Вместо подзапроса для ваших возвратов (с той же группой, что и ваш запрос «Счета-фактуры») вы должны вместо этого использовать ОБЪЕДИНЕНИЕ. Ваш Group-By в порядке, но, как вы упомянули, ваш подзапрос приведет к неверным данным.

Каждый раз, когда у вас есть четкие «отправные точки» для ваших данных, Union — это то, что вам нужно.

person Overhed    schedule 05.01.2017
comment
Но когда я использую UNION, я получаю отдельные строки результатов для продаж и возвратов. Я использую подзапрос, поэтому я могу вычесть возврат из продаж и получить окончательное число. - person Cesar Augusto; 13.02.2017
comment
Поэтому оберните выделение вокруг UNION и сгруппируйте там свои данные. - person Overhed; 14.02.2017
comment
но как мне это сделать? - person Cesar Augusto; 16.02.2017