2008-12-10 62 views
1
SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY hrl.Frn) as Row, 
     hrl.unq, hrl.LcnsId, hc.Business,hc.Name,hc.Phone, 
     hrl.Frn,hrl.CallSign, hrl.gsamarkettypeid, 
     gmt.[Market Type Code] + ' - ' + gmt.gsamarkettype, 
     hrl.gsalatitude,hrl.gsalongitude, 
     rsc.RadioServiceCode + ' - ' + rsc.RadioService, 
        GrantDt, ExpirationDt, EffectiveDt, 
     CancellationDt 
     FROM dbo.sbi_f_HldrRgstrtnLcns hrl 
     INNER JOIN dbo.sbi_f_HldrCntcts hc on 
        hc.CallSign = hrl.CallSign 
     INNER JOIN dbo.sbi_l_radioservicecodes rsc on 
        rsc.radioservicecodeid = hrl.radioservicecodeid 
     LEFT OUTER JOIN dbo.sbi_l_GSAMarketTypes gmt on 
        gmt.GSAMarketTypeId = hrl.GSAMarketTypeId 
     WHERE hc.Entity_Type = 'L' AND hrl.LicenseStatusId IN (1) 
     and Row >=1 and Row <= 20) -- The error occurs here, 
        -- it says incorrect syntax near) 

回答

6

移動你行的標準到外選擇

SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY hrl.Frn) as Row, 
    ... 
       WHERE hc.Entity_Type = 'L' AND hrl.LicenseStatusId IN (1) 
      ) T 
WHERE T.Row >=1 and T.Row <= 20) 
0

由於where子句在Select子句之前處理,所以不能在where子句中爲列使用別名。

編輯:

您也可以只添加子查詢在where子句中

Where ((SELECT ROW_NUMBER() OVER (ORDER BY hrl.Frn)) < 20, 

或不usingt ROW_NUMBER可言,

Where (Select Count(*) 
From dbo.sbi_f_HldrRgstrtnLcns 
Where Frn < hrl.Frn) < 20 
+0

不可以,因爲現在它期望OVER關鍵字。 – Xaisoft 2008-12-10 21:05:58

1

您可以使用CTE執行此操作:

WITH NumberedRows AS 
(
    SELECT 
     ROW_NUMBER() OVER (ORDER BY hrn.Frl) AS RowNum, 
     ... 
    WHERE 
     hc.Entity_Type = 'L' 
     AND hrl.LicenseStatusId IN (1) 
) 
SELECT 
    * 
FROM 
    NumberedRows 
WHERE 
    RowNum <= 20 
0

檢查您正在使用哪個版本的sql server數據庫。 row_number是從sql server 2005開始添加的。它不會支持SQL Server 2000