我正在使用以下SQL查詢返回25行。如何修改它忽略第一行:選擇所有行並忽略第一行
SELECT fiscal_year, SUM(total_sales) as sum_of_year, AVG(SUM(total_sales))
OVER() as avg_sum
FROM sales_report
GROUP BY fiscal_year
ORDER BY fiscal_year ASC
我使用SQL Server 2008的
感謝。
我正在使用以下SQL查詢返回25行。如何修改它忽略第一行:選擇所有行並忽略第一行
SELECT fiscal_year, SUM(total_sales) as sum_of_year, AVG(SUM(total_sales))
OVER() as avg_sum
FROM sales_report
GROUP BY fiscal_year
ORDER BY fiscal_year ASC
我使用SQL Server 2008的
感謝。
您可以在SQL Server 2008中
SELECT fiscal_year, SUM(total_sales) as sum_of_year, AVG(SUM(total_sales))
OVER() as avg_sum
FROM sales_report
GROUP BY fiscal_year
EXCEPT
SELECT TOP 1 fiscal_year, SUM(total_sales) as sum_of_year, AVG(SUM(total_sales))
OVER() as avg_sum
FROM sales_report
GROUP BY fiscal_year
ORDER BY fiscal_year ASC
使用EXCEPT
對於SQL Server 2012及以上版本,你可以使用FETCH OFFSET
假設這正是你要如何查詢,然後: SELECT fiscal_year, SUM(total_sales) as sum_of_year, AVG(SUM(total_sales)) OVER() as avg_sum FROM sales_report WHERE fiscal year <> (SELECT MIN(Fiscal_year) FROM sales_report)) GROUP BY fiscal_year ORDER BY fiscal_year ASC
然後你可以刪除「排序」。
適用於所有版本的
...這可能是更好的選擇,但與其他答案相比,它會改變他的輸出,因爲運行平均值會改變。另外,不,你(可能)不能刪除'ORDER BY' - 如果OP要求它們按照特定的順序(不管刪除'第一個'),他需要這個子句。 –
可以使用ROW_NUMBER
窗函數
;with cte as
(
SELECT Row_number()over(order by fiscal_year) as RN,fiscal_year, SUM(total_sales) as sum_of_year, AVG(SUM(total_sales))
OVER() as avg_sum
FROM sales_report
GROUP BY fiscal_year
)
select *
From cte
Where RN <> 1
ORDER BY fiscal_year ASC
希望這是正確的。這是我曾試圖彌補它:
SELECT fiscal_year
,a.sum_of_year
,AVG(SUM(a.sum_of_year)) OVER() AS avg_sum
FROM (
SELECT Row_number() OVER (
ORDER BY fiscal_year
) AS RN
,fiscal_year
,SUM(total_sales) AS sum_of_year
FROM test_fiscal
GROUP BY fiscal_year
) a
WHERE a.rN > 1
GROUP BY fiscal_year
,rn
,a.sum_of_year
ORDER BY fiscal_year ASC
我不相信LIMIT和OFFSET在SQL Server 2008中提供您可能需要使用ROW_NUMBER的一些變種()(不包括它等於1) 。 – ZLK
... _你爲什麼要忽略第一行?爲什麼不用一個'WHERE'子句排除那個財政年度呢?請注意,在AVG運行之後排除它(與'OFFSET'或使用窗口函數一樣)會使平均值「不正確」 - 您將添加對用戶不可見的數字。 –