現在我的存儲過程返回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