2017-08-04 123 views
1

我試圖合併這兩個以下SQL Server 2008中使用UNION運算符的查詢的結果,但有以下錯誤關鍵字SQL Server 2008的合併兩個查詢

附近有語法錯誤的結果,工會」。

我的代碼:

SELECT TOP 1 
    CITY, LEN(CITY) 
FROM 
    table1 
ORDER BY 
    LEN (CITY), CITY ASC 

UNION 

SELECT TOP 1 
    CITY, LEN(CITY) 
FROM 
    table1 
ORDER BY 
    LEN (CITY) DESC, CITY ASC 

任何意見,將不勝感激。

感謝

+2

爲了通過應該在第二個查詢僅用於 – Rams

+0

爲什麼你需要從同一個表中選擇兩次相同的記錄? –

+0

但仍然沒有解決問題。它不會合並兩個查詢 – Algo

回答

0

在你的第一個選擇語句中移除ASC順序命令。只能在任何查詢結束時對結果進行排序,因爲在查詢中間的排序(如果允許)會導致獲得一致結果的許多問題。

編輯:我意識到表是一樣的,你需要將所有使用聯盟,或作爲其他意見指出,重複的取出一個UNION。

SELECT TOP 1 
    CITY, LEN(CITY) 
FROM 
    table1 

UNION ALL 

SELECT TOP 1 
    CITY, LEN(CITY) 
FROM 
    table1 
ORDER BY 
    LEN (CITY) DESC, CITY ASC 
+0

然而,這並不能解決問題......它並沒有合併什麼是你想合併的結果 – Algo

+0

?你在同一張桌子上使用工會嗎? – CodeSurvivor

0

在這種情況下,您可以使用公用表表達式。試試這個

;With cte 
AS (
select * , ROW_NUMBER() OVER(ORDER BY LEN (CITY) DESC, CITY ASC) as rn 
    FROM table1 
    ) 
    select * from cte where rn = 1 
    union 
    select * from cte where rn = 1 
1

這是正確的方式做到這一點

Select * From 
(
SELECT TOP 1 
    CITY, cityLen = LEN(CITY) 
FROM 
    table1 
ORDER BY 
    cityLen, CITY ASC 
) a 
UNION 
Select * From 
(
SELECT TOP 1 
    CITY, cityLen = LEN(CITY) 
FROM 
    table1 
ORDER BY 
    cityLen DESC, CITY ASC 
) b 

或使用Row_Number窗函數

select * from 
(
select *, 
     ROW_NUMBER() OVER(ORDER BY LEN (CITY) DESC, CITY ASC) as Drn, 
     ROW_NUMBER() OVER(ORDER BY LEN (CITY) ASC, CITY ASC) as Arn, 
FROM table1 
) a 
where 1 in (Arn,Drn) 
+0

第一個代碼給我下面的錯誤沒有列名是爲第2欄指明B‘「a'.No列名第2欄指定’。 – Algo

+0

just alias len(city)as lencity on the first query inner select'SELECT TOP 1 CITY,LEN(CITY)as lenCity'雖然我喜歡'union all'而不是工會 – xQbert

+0

@Algo更新..現在檢查.. –