现在我的存储过程返回2个不同的结果做一个设定为@booked,另一个用于@ booked1存储过程的问题,与我的where子句和if语句
,如果你仔细看我的查询正在进行每个@booked和@booked都是一样的,但一个是用户选择年份,另一个是当年。
我不想要两个不同的结果集,我想参加所选年度和本年度并排通过SDESCR(这是他们所共有的一列)我面临
另一个障碍是我用@模式来决定用户是否想要netsales,销售......等等。
我知道我需要sometype。这时候的加入,但它不是工作,因为我有一个WHERE语句,说在那里dyyyy = @yeartoget
这不会让本年度的数据工作
ALTER PROCEDURE [dbo].[test1]
@mode varchar(20),
@YearToGet int
AS
SET NOCOUNT ON
Declare @Booked Int
Set @Booked = CONVERT(int,DateAdd(year, @YearToGet - Year(getdate() + 1),
DateAdd(day, DateDiff(day, 1, getdate()), 1)))
Declare @Booked1 Int
Set @Booked1 = CONVERT(int,DateAdd(year, (year(getdate())) - Year(getdate() + 1),
DateAdd(day, DateDiff(day, 1, getdate()), 1)))
If @mode = 'Sales'
Select
Division,
SDESCR,
DYYYY,
Sum(Case When Booked <= @Booked Then NetAmount End) ASofNetSales,
SUM(NetAmount) AS YENetSales,
Sum(Case When Booked <= @Booked Then PARTY End) AS ASofPAX,
SUM(PARTY) AS YEPAX
From dbo.B101BookingsDetails
Where DYYYY = @YearToGet
Group By SDESCR, DYYYY, Division
Order By Division, SDESCR, DYYYY
else if @mode = 'netsales'
Select Division,
SDESCR,
DYYYY,
Sum(Case When Booked <= @Booked Then NetAmount End) ASofNetSales,
SUM(NetAmount) AS YENetSales,
Sum(Case When Booked <= @Booked Then PARTY End) AS ASofPAX,
SUM(PARTY) AS YEPAX
From dbo.B101BookingsDetails
Where DYYYY = @YearToGet
Group By SDESCR, DYYYY, Division
Order By Division, SDESCR, DYYYY
If @mode = 'Sales'
Select
Division,
SDESCR,
DYYYY,
Sum(Case When Booked <= @Booked1 Then NetAmount End) currentNetSales,
Sum(Case When Booked <= @Booked1 Then PARTY End) AS currentPAX
From dbo.B101BookingsDetails
Where DYYYY = (year(getdate()))
Group By SDESCR, DYYYY, Division
Order By Division, SDESCR, DYYYY
else if @mode = 'netsales'
Select Division,
SDESCR,
DYYYY,
Sum(Case When Booked <= @Booked1 Then NetAmount End) currentNetSales,
Sum(Case When Booked <= @Booked1 Then PARTY End) AS currentPAX
From dbo.B101BookingsDetails
Where DYYYY = (year(getdate()))
Group By SDESCR, DYYYY, Division
Order By Division, SDESCR, DYYYY
Else if @mode = 'Inssales'
Select Division,
SDESCR,
DYYYY,
Sum(Case When Booked <= @Booked1 Then InsAmount End) currentInsSales,
Sum(Case When Booked <= @Booked1 Then PARTY End) AS currentPAX
From dbo.B101BookingsDetails
Where DYYYY = (year(getdate()))
Group By SDESCR, DYYYY, Division
Order By Division, SDESCR, DYYYY
我的主要建议是:让这个分开存储的特效,每一个“模式” - 唐't包装所有这些不同的选择到一个单独的存储过程... – 2011-01-05 16:12:11
我有一些麻烦理解为什么分配@booked与SELECT CONVERT(int,DateAdd(year,@YearToGet - Year(getdate()+ 1)) DateAdd(day,DateDiff(day,1,getdate()),1)))。如果我选择2011作为@YearToGet,则结果是40546.这是您的预期结果吗?还是应该是一年? – Lamak 2011-01-05 16:19:38
是啊谁开发我们的数据库的人想要使生活艰难,并使用整数作为日期 – MyHeadHurts 2011-01-05 16:25:58