如何从第一个日期到最后一个日期对用户输入参数进行编码SQL查询管理器

问题描述

我需要帮助,我编写了代码,并且必须在语句中使用用户参数>> [%1]中的 Last Date 但是当我执行..填充的窗口时,迫使我从最后一个日期到第一个日期进行填充。它应该从第一个日期到最后一个日期填写。

当我执行...“用户窗口”弹出窗口时,需要输入从第一个日期到最后一个日期的日期(例如:01/08/20-30/09/20),但是从上面的编码中可以看出,

用户必须输入最后一个日期到第一个日期(例如:30/09/20-01/08/20) 我已附上图片,您可以清楚看到它>>>>

1

Select 
    T0.docnum,T0.docdate,Sum(T1.Quantity),Sum(case when T0.docdate between dateadd(month,DATEADD(DAY,1-DATEPART(day,'[%1]'),'[%1]')) and eomonth(dateadd(month,'[%1]'))) then T1.Quantity*T2.U_hmc_vollts else 0 end) as 'm12_Lts',sum(case when T0.docdate between dateadd(month,-1,1- 
    DATEPART(day,'[%1]'))) then T1.Quantity*T2.U_hmc_vollts else 0 end) as 'm11_Lts'
From    OINV T0 
    left join inv1 T1 on T0.DocEntry = T1.DocEntry 
    left join oitm T2 on T1.ItemCode = T2.ItemCode 
Where 
    T0.docdate >= '[%0]' and T0.Docdate <= '[%1]' 
Group By 
    T0.docnum,T0.Docdate

解决方法

尝试插入

/*SELECT FROM [dbo].[OWTR] p1*/

declare @FROM as Datetime
declare @TO as datetime
/* WHERE */
set @FROM = /* p1.docdate */ '[%0]'
set @TO = /* p1.docdate */  '[%1]'

位于查询顶部(表并不重要) 然后在其余查询中将[%0]替换为@FROM,将[%1]替换为@TO。

完整代码:

/*SELECT FROM [dbo].[OWTR] p1*/

 declare @FROM as Datetime
 declare @TO as datetime
 /* WHERE */
 set @FROM = /* p1.docdate */ '[%0]'
 set @TO = /* p1.docdate */  '[%1]'



Select 
T0.docnum,T0.docdate,Sum(T1.Quantity),Sum(case when T0.docdate between dateadd(month,DATEADD(DAY,1- 
DATEPART(day,@TO),@TO)) and eomonth(dateadd(month,1- 
 DATEPART(day,@TO))) then T1.Quantity*T2.U_hmc_vollts else 0 end) as 
'm12_Lts',sum(case when T0.docdate between dateadd(month,-1,@TO))) then T1.Quantity*T2.U_hmc_vollts else 0 end) as 
'm11_Lts'
From    OINV T0 
left join inv1 T1 on T0.DocEntry = T1.DocEntry 
left join oitm T2 on T1.ItemCode = T2.ItemCode 
Where 
T0.docdate >= @FROM and T0.Docdate <= @TO 
Group By 
T0.docnum,T0.Docdate

让我知道你的生活。

,

order by添加到您的SQL语句中。

https://docs.microsoft.com/en-us/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-ver15