2013-07-23 123 views
1
Location TotalRevenue LocationID 

Orugodawatta 10059135.78 OR 
Kohuwala 7058537.73 KH 
Koswaththa 6717136.02 KW 
Havelock Town 5748932.59 HT 
Negombo   5193678.33 NG 
Induruwa 3017552.74 IA 
Absdhku   2254281.21  AB 

我在sql server 2008中有一个表。我如何选择所有其他行没有前5个记录? 如果我的表有100条记录,我可以选择所有其他95条没有5条记录的记录。请帮助我我如何选择所有其他记录没有前五个记录?

+0

你是什么意思“没有前5名记录“?只有最后的95个行或第一个95? – KarelG

+1

查看http://stackoverflow.com/questions/2135418/equivalent-of-limit-and-offset-for-sql-server – incarnate

+0

SELECT top(5)Location,SUM(SellingPrice)AS'Total Revenue',LocationID FROM BI_LocWiseTopItems WHERE(GRNDATE'和GETDATE()) GROUP BY位置,位置ID ORDER BY'总收入'desc这是我的查询。它只返回前5个记录。 BT我想只有所有其他记录没有顶部5.记录数量动态变化 – user2220385

回答

0
SELECT * FROM tableName 
EXCEPT (SELECT TOP(5)* FROM tableName ) 

您的整个查询。试试

SELECT Location,[Total Revenue],LocationID 
FROM 
    (
    SELECT Location, SUM(SellingPrice) AS 'Total Revenue', LocationID 
    FROM BI_LocWiseTopItems 
    WHERE (GRNDate BETWEEN '' AND GETDATE()) 
    GROUP BY Location, LocationID ORDER BY 'Total Revenue' desc 
) AS temp 
EXCEPT (
    SELECT top(5)Location, SUM(SellingPrice) AS 'Total Revenue', LocationID 
    FROM BI_LocWiseTopItems 
    WHERE (GRNDate BETWEEN '' AND GETDATE()) 
    GROUP BY Location, LocationID ORDER BY 'Total Revenue' desc 
) 
+0

矫枉过正。升级到MSSQL 2011,它有一个'OFFSET'子句:) – incarnate

+0

MSSQL 2011?这是2012年。但他没有提及版本 – Nithesh

+0

和升级SQL服务器(与所有相关费用)不是矫枉过正? – Mr47

0

假设你通过查询

select Top 5 * 
from Table_name 
order by Location desc 

获得前5个记录,以便让你的95条记录

select Top 100 * 
from Table_name 
order by Location desc 
except 
select Top 5 * 
from Table_name 
order by Location desc 
1

试试这个。

SELECT * FROM MyTable WHERE LOCATION NOT IN (SELECT TOP 5 LOCATION FROM MyTable) 
0

在第一CTE选择全部,在第二选择前5名,而只使用EXCEPT

WITH CTE_ALL AS 
(
    SELECT 
      Location , 
      SUM(SellingPrice) AS [Total Revenue] , 
      LocationID 
    FROM BI_LocWiseTopItems 
    WHERE (GRNDate BETWEEN '' AND GETDATE()) 
    GROUP BY Location , 
      LocationID 
) 
, CTE_TOP5 AS 
(
    SELECT TOP 5 * FROM CTE_ALL 
    ORDER BY [Total Revenue] 
) 
SELECT * FROM CTE_ALL 
EXCEPT 
SELECT * FROM CTE_TOP5 

SQLFiddle DEMO - 简化CTE

0
; WITH top5 AS (
    SELECT TOP 5 
     Location 
     , TotalRevenue 
     , LocationID 
    FROM your_table 
    ORDER 
     BY TotalRevenue DESC 
) 
SELECT Location 
    , TotalRevenue 
    , LocationID 
FROM your_table 
EXCEPT 
SELECT Location 
    , TotalRevenue 
    , LocationID 
FROM top5 
相关问题