1
我有以下查詢來優化。SQL Server 2008 R2:結合兩個查詢進行優化
以下用於從利潤表中獲取詳細信息。
第一個內部SELECT:在第一個SELECT語句中,我必須從利潤表中獲取詳細信息併爲每行分配行號。
第二個內部SELECT:在第二個SELECT語句中,我必須做一些計算(總和)。
外部選擇:通過在id上組合它們並對數據進行一些操作來獲得結果。
代碼:
SELECT
a.p_id, p_Name,
convert(varchar, a.EndDate, 107) EndDate,
convert(varchar, a.EndDate, 106) NewEndDate,
LTRIM(a.p_id)) + '' + REPLACE(LEFT(CONVERT(VARCHAR, a.EndDate, 106), 6) + '' + RIGHT(CONVERT(VARCHAR, a.EndDate, 106), 2), ' ', '') as Compo,
a.GP,
b.fpro FirstProfit,
(b.fpro - b.spro) prodiff,
a.Qtity * a.GP as Ov,
a.Qtity,
b.fproChanPer
FROM
(SELECT
p_Name, p_id,
EndDate,
GP, FirstProfit,
prodiff,
Qtity,
ROW_NUMBER() OVER (PARTITION By p_Name, p_id ORDER BY EndDate) Rown
FROM
tbl_profit) a,
(SELECT
p_id,
CAST(SUM(FirstProfit) AS DECIMAL(24,2)) fpro,
CAST(SUM(SecondProfit) AS DECIMAL(24,2)) spro,
CAST(CAST(SUM(prodiff) AS DECIMAL(24,2))/CAST(SUM(SecondProfit) AS DECIMAL(24,2)) * 100 AS DECIMAL(24,2)) fproChanPer
FROM
tbl_profit
GROUP BY
p_id) b
WHERE
b.p_id = a.p_id
AND Rown = 1
我的問題:我可以結合這兩個(化名a
和b
)內SELECT查詢語句的優化?
我的嘗試:我嘗試了使用以下查詢但得到不同的計算結果。
SELECT p_Name,
p_id,
EndDate,
GP,
FirstProfit,
prodiff,
Qtity
ROW_NUMBER()OVER (PARTITION By p_Name,p_id ORDER By EndDate) Rown,
CAST(SUM(FirstProfit) AS DECIMAL(24,2)) fpro,
CAST(SUM(SecondProfit) AS DECIMAL(24,2)) spro,
CAST(CAST(SUM(prodiff) AS DECIMAL(24,2)) /CAST(SUM(SecondProfit) AS DECIMAL(24,2)) * 100 AS DECIMAL(24,2)) fproChanPer
FROM tbl_profit
GROUP By p_id,p_Name,EndDate,GP,FirstProfit,prodiff,Qtity
不確定Sql server 2008是否支持'SUM()OVER()',但如果是的話,您可以使用一個內部選擇。 –