2017-09-27 197 views
-2

我試圖理清工會後,表中所有的SQL SERVERGROUP BY子句中的錯誤在SELECT UNION ALL ORDER BY查詢

我在幾個地方(How to use order by with union all in sql?這裏例如)已讀寫:

SELECT * 
FROM 
     (
      SELECT * FROM TABLE_A 
      UNION ALL 
      SELECT * FROM TABLE_B 
     ) dum 
-- ORDER BY ..... 

不過,我不斷收到一個錯誤說:

Column 'dum.var' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 

,而我沒有任何GROUP BY查詢...

有人可以向我解釋這個嗎?

+0

「TABLE_A」和「TABLE_B」的表結構是什麼?也許聯盟本身有問題。 –

+0

不,它們具有相同的結構,即四個變量(而dum.var就是其中之一)。實際上,當我省略'order by'並只運行括號中的內容時,它運行良好... – Lili

+0

這是您正在使用的確切查詢嗎?或者你可能有一些MAX,MIN,SUM,AVG或其他什麼查詢? – Tyron78

回答

0
DECLARE @t1 TABLE(
    ID INT 
    ,Val INT 
); 

DECLARE @t2 TABLE(
    ID INT 
    ,Val INT 
); 


INSERT INTO @t1 VALUES (1, 10), (2, 20), (3, 30); 
INSERT INTO @t2 VALUES (1, 40), (2, 50), (3, 60); 

SELECT * 
FROM (
    SELECT x.ID, SUM(x.Val) SumVal 
    FROM (
    SELECT ID, 
      Val 
     FROM @t1 
    UNION ALL 
    SELECT ID, 
      Val 
     FROM @t2 
    ) x 
    GROUP BY x.ID 
) y 
ORDER BY SumVal 
1

感謝上面評論中的Tyron78,我發現了這個錯誤。

的實際查詢爲:

SELECT * 
FROM 
(
SELECT 
     * 
FROM 
#TABLE1 
UNION ALL 
SELECT 
     * 
FROM 
#TABLE2 
) AS Z 
ORDER BY sum([Units]) DESC, [Distance], [ID], [Product] 

的問題是在和(),因爲我已經在這兩個Table 1和Table前求和。 因此,好查詢如下:

SELECT * 
FROM 
(
SELECT 
     * 
FROM 
#TABLE1 
UNION ALL 
SELECT 
     * 
FROM 
#TABLE2 
) AS Z 
ORDER BY [Units] DESC, [Distance], [ID], [Product] 

謝謝大家!

0

您將需要提供要對結果集進行排序的列名稱。

SELECT * 
FROM 
    (
     SELECT * FROM TABLE_A 
     UNION ALL 
     SELECT * FROM TABLE_B 
    ) dum 
order by <column_name> [asc|desc] 

兩個表格中的值必須相同。