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

I have a table in sql server 2008. how can i select all other rows without top 5 records? if my table had 100 records i can selece all other 95 records without top 5 records. please help me

Nithesh Narayanan
  • 11,481
  • 34
  • 98
  • 138
  • What do you mean "without the top 5 records" ? Only the last 95 of the rows, or the first 95 ? – KarelG Jul 23 '13 at 09:01
  • 1
    See http://stackoverflow.com/questions/2135418/equivalent-of-limit-and-offset-for-sql-server – BorisOkunskiy Jul 23 '13 at 09:02
  • 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 this is my query. it is returining only top 5 records. bt i want only all othre records without top 5. number of records are dynamically changing – user2220385 Jul 23 '13 at 09:03

6 Answers6

1

Try this.

SELECT * FROM MyTable WHERE LOCATION NOT IN (SELECT TOP 5 LOCATION FROM MyTable)
Kosala W
  • 2,133
  • 1
  • 15
  • 20
1
SELECT TOP (SELECT Count(*) - 5 FROM tableName WHERE YOUR_WHERE_CLAUSE) * 
  FROM tableName 
 WHERE YOUR_WHERE_CLAUSE
 ORDER BY COLUMN_NAME DESC
Romesh
  • 2,291
  • 3
  • 24
  • 47
0
SELECT * FROM tableName 
EXCEPT (SELECT TOP(5)* FROM tableName  )

Your entire query. Have a try

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 
 )
Nithesh Narayanan
  • 11,481
  • 34
  • 98
  • 138
0

suppose you get Top 5 records by Query

select Top 5 * 
from Table_name 
order by Location desc

So to get your 95 records

select Top 100 * 
from Table_name 
order by Location desc
except
select Top 5 * 
from Table_name 
order by Location desc
Prahalad Gaggar
  • 11,389
  • 16
  • 53
  • 71
0

Select all in first CTE, select top 5 in second, and just use 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 - Simplified for CTE

Nenad Zivkovic
  • 18,221
  • 6
  • 42
  • 55
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
gvee
  • 16,732
  • 35
  • 50