2014-10-30 115 views
0

我在努力讓這段代碼正常工作,我想要做的是選擇多個列名稱,然後將結果按同一個表中的其他兩列分組。按分組嵌套選擇語句

但我似乎無法得到正確的語法,所以任何有比我更多的SQL服務器經驗誰可以幫助我這將不勝感激。

我正在尋找的是返回基於緯度非重複的結果,東經

實際代碼

SELECT [CityName]       AS CityName, 
      ISNULL(NULLIF([CountyName],''),'') AS CountyName, 
      [CityLatitude]      AS Latitude, 
      [CityLongitude]     AS Longitude 
    FROM [dbo].[tblCityLatitudeLongitudes] 
      WHERE [CountryName] = @Country 

    ORDER by [CityName] ASC 
    OFFSET @OffSet ROWS 
FETCH NEXT 10 ROWS ONLY; 

我已經嘗試了各種方式,以下是我的最後一次嘗試,但仍然拋出錯誤

SELECT a.CityName      AS CityName, 
      ISNULL(NULLIF(a.CountyName,''),'') AS CountyName, 
      a.CityLatitude     AS Latitude, 
      a.CityLongitude     AS Longitude 
      FROM 
(SELECT b.CityLatitude,b.CityLongitude 
FROM tblCityLatitudeLongitudes b 
WHERE b.CountryName = 'united kingdom' 
GROUP BY b.CityLatitude,b.CityLongitude) a 

錯誤

Msg 207, Level 16, State 1, Line 24 
Invalid column name 'CityName'. 
Msg 207, Level 16, State 1, Line 25 
Invalid column name 'CountyName'. 
Msg 207, Level 16, State 1, Line 25 
Invalid column name 'CountyName'.  
+1

您可加入tblCityLatitudeLongitudes' – bummi 2014-10-30 23:04:48

+0

@bummi的'的sheam不知道你的意思 – 2014-10-30 23:08:42

+0

邊注:在'ISNULL(NULLIF([CountyName], ''), '')的''NULLIF'似乎多餘的,'ISNULL([CountyName],'')'會給你同樣的結果。 – 2014-10-30 23:26:02

回答

1

您可以在其他列上進行分組並獲取最大的經度和緯度。

SELECT a.CityName      AS CityName, 
     ISNULL(NULLIF(a.CountyName,''),'') AS CountyName, 
     Max(a.CityLatitude )    AS Latitude, 
     Max(a.CityLongitude  )   AS Longitude 
     FROM 
    tblCityLatitudeLongitudes a 
    WHERE a.CountryName = 'united kingdom' 
    GROUP BY CityName, ISNULL(NULLIF(a.CountyName,''),'') 
ORDER by [CityName] ASC 
OFFSET @OffSet ROWS 
FETCH NEXT 10 ROWS ONLY; 
+0

不起作用錯誤列'tblCityLatitudeLongitudes.CountyName'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。 – 2014-10-30 23:13:17

+0

@george phillipson,它是錯別字糾正它,組應該在縣名,我有國家名,現在試試 – radar 2014-10-30 23:16:23

+0

雷達你需要'GROUP BY a.CityName,ISNULL(NULLIF(a.CountyName,'') ,'')'讓這個工作。 – 2014-10-30 23:16:50

1
SELECT CityName 
     ,CountyName 
     ,Latitude 
     ,Longitude 
FROM (
    SELECT [CityName]       AS CityName, 
       ISNULL(NULLIF([CountyName],''),'') AS CountyName, 
       [CityLatitude]      AS Latitude, 
       [CityLongitude]     AS Longitude, 
       ROW_NUMBER() OVER (PARTITION BY [CityLatitude],[CityLongitude] ORDER BY (SELECT NULL))rn 
    FROM [dbo].[tblCityLatitudeLongitudes] 
    WHERE [CountryName] = @Country 
    )A 
WHERE rn = 1 
ORDER by [CityName] ASC 
OFFSET @OffSet ROWS 
FETCH NEXT 10 ROWS ONLY; 
+0

感謝現在測試並似乎工作 – 2014-10-30 23:14:10

+0

似乎無法獲得OFFSET OFFSet ROWS FETCH NEXT 10 ROWS只能工作,不知道它需要去的位置 – 2014-10-30 23:18:55

+0

您沒有OFFSET在SQL Server 2008中,它是在SQL Server 2012中引入的。 – 2014-10-30 23:19:28