2017-04-19 63 views
0

我知道有關此錯誤消息的問題已被詢問,但找不到真正適合我的問題的任何問題。按3列分組:「每個組按表達式必須包含至少一列不是外部參考」

我有一個表包含三列(A,B,C)包含不同的值,我需要確定所有相同的組合。例如去「表A」下面的:

| A | B | C | 
| 1 | 2 | 3 | 
| 1 | 3 | 3 | 
| 1 | 2 | 3 | 
| 2 | 2 | 2 | 
| 1 | 3 | 3 | 

...我想也得到「表B」的:

| A | B | C | count | 
| 1 | 2 | 3 | 1 | 
| 1 | 3 | 3 | 1 | 
| 2 | 2 | 2 | 1 | 

(我需要的最後一列中的「數」 1每行以備後用)

當我嘗試「由A,B,C組」時,我得到標題中提到的錯誤。任何幫助將不勝感激!

僅供參考,我不認爲它真的改變了此事,但​​是從其他表中獲得「表A」:「SOURCE_TABLE」,由於這種類型的查詢:

select (case when ...),(case when ...),(case when ...) from SOURCE_TABLE 

和我需要僅用一個查詢來構建「TABLE B」。

+0

你能後你試過準確的查詢? –

+0

在第一個表格中您有'1,2,3'和'1,3,3'兩次,並且在所需的結果表格中有該行的「count」爲「1」。這是一個錯誤,還是你真的想在每一個獨特的排列之後得到「1」?如果是這樣,這不算什麼! – Sturgus

+0

你正在使用哪些DBMS? Postgres的?甲骨文? –

回答

1

我想你以後的使用有什麼不同

select distinct A,B,C, 1 [count] -- where 1 is a static value for later use 
    from (select ... from sourcetable) X 
0

聽起來像是你有正確的想法。我的猜測是由於CASE聲明中的外部引用導致錯誤發生。如果您將第一個查詢包裝在另一個查詢中,則可能會緩解此問題。嘗試:

SELECT A, B, C, COUNT(*) AS [UniqueRowCount] 
FROM (
    SELECT (case when ...) AS A, (case when ...) AS B, (case when ...) AS C FROM SOURCE_TABLE 
) AS Subquery 
GROUP BY A, B, C 

重新閱讀您的問題後,您似乎完全不計算,只是在每個不同的行後面加上「1」。如果是這樣的話,那麼你可以嘗試:

SELECT DISTINCT A, B, C, [Count] 
FROM (
    SELECT (case when ...) AS A, (case when ...) AS B, (case when ...) AS C, 1 AS [Count] FROM SOURCE_TABLE 
) AS Subquery 

假設你的外部引用例外只有你的聚集正在發生,你也應該簡單地嘗試:

SELECT DISTINCT (case when ...) AS A, (case when ...) AS B, (case when ...) AS C, 1 AS [Count] FROM SOURCE_TABLE 
+0

非常感謝,它的工作原理:) 我是一名SQL初學者,如果你有一分鐘​​,我想知道你是否可以解釋什麼是「外部參考」問題? –

+0

@ raphael.cardinaux這是一個棘手的事情來解釋。我相信你爲什麼得到你的錯誤的概念可以解釋得體[這裏](http://sqlmag.com/blog/aggregates-outer-reference)。另外,不要忘記接受答案。 – Sturgus

相關問題