2012-01-12 97 views
0

我已經選擇以下設置:不是一個GROUP BY表達式

Select attribut1, dateattribut, attribut3, 
     attribut4, attribut15, town_CODE, count(*)  
from (
select attribut1, dateattribut, attribut3, attribut4, attribut15, (CASE 
    WHEN TO_CHAR(dateattribut,'YYYY') = '2005' THEN 
    CASE town_CODE 
    WHEN '039' THEN '078' WHEN '050' THEN '093' 
    WHEN '091' THEN '008' WHEN '102' THEN '093' 
    ELSE town_CODE end 
    ELSE town_CODE end) as town_CODE 
from towntable) GROUP BY attribut1, dateattribut, 
         attribut3, attribut4, 
         attribut15, town_CODE 
having count(*) > 1; 

當我執行我們的服務器上此查詢它做工精細。但在我的客戶的服務器上,我得到了oracle錯誤ORA-00979: not a GROUP BY expression

據我發現,即時通訊與案件的問題和別名。 無法使用它。

有什麼建議嗎?

*我試圖做的這個陳述是得到所有的雙項。與內部查詢我將所有舊代碼更改爲新的,然後我想分組他們看看他們是否存在乘法時間。 有些客戶確實使用舊代碼,現在可能他們有同一個小鎮2次。

編輯

SELECT * FROM product_component_version

,我得到兩個:

Product          Version   Status 

NLSRTL          10.2.0.4.0  Production 
Oracle Database 10g Enterprise Edition  10.2.0.4.0  64bi 
PL/SQL          10.2.0.4.0  Production 
TNS for 64-bit Windows:      10.2.0.4.0  Production 

EDIT2

我的測試表明我說,他不喜歡用別名調用。 是否有一個設置,該別名不被識別?

回答

0

我的解決方案是使用視圖。

內部選擇作爲視圖,然後外部選擇正常,它工作正常。

我發現他不喜歡town_CODE在外面的選擇。

Select attribut1, dateattribut, attribut3, 
     attribut4, attribut15, town_CODE, count(*)  
from v_towntable 
GROUP BY attribut1, dateattribut, attribut3, 
     attribut4, attribut15, town_CODE 
having count(*) > 1 
1

您在表名後加上逗號amit15後缺少括號。試試這個:

Select attribut1, dateattribut, attribut3, 
     attribut4, attribut15, town_CODE, count(*)  
from (
select attribut1, dateattribut, attribut3, attribut4, attribut15, (CASE 
    WHEN TO_CHAR(dateattribut,'YYYY') = '2005' THEN 
    CASE town_CODE 
    WHEN '039' THEN '078' WHEN '050' THEN '093' 
    WHEN '091' THEN '008' WHEN '102' THEN '093' 
    ELSE town_CODE end 
    ELSE town_CODE end) as town_CODE 
from towntable) GROUP BY attribut1, dateattribut, 
         attribut3, attribut4, 
         attribut15, town_CODE 
having count(*) > 1; 
+0

以及它只是一個錯字實際的查詢是有點大(更多本attribut變化) – domiSchenk 2012-01-12 13:13:38

+0

如果從上述兩個服務器上運行只是我的代碼,你得到任何錯誤? – 2012-01-12 14:50:01

+0

仍然是一樣的錯誤:-(我發現當我刪除town_code在第一選擇它的作品,但後來我不知道哪個城鎮它 – domiSchenk 2012-01-12 14:58:13

0

有似乎是在原來的查詢一個或兩個語法錯誤 - 下面應該工作:

Select attribut1, 
     dateattribut, 
     attribut3, 
     attribut4, 
     attribut15, 
     town_CODE, 
     count(*)  
from (select attribut1, 
      dateattribut, 
      attribut3, 
      attribut4, 
      attribut15, 
      CASE WHEN TO_CHAR(dateattribut,'YYYY') = '2005' THEN 
        CASE town_CODE 
         WHEN '039' THEN '078' 
         WHEN '050' THEN '093' 
         WHEN '091' THEN '008' 
         WHEN '102' THEN '093' 
         ELSE town_CODE 
        end 
        ELSE town_CODE 
      end as town_CODE 
     from towntable) v 
GROUP BY attribut1, 
     dateattribut, 
     attribut3, 
     attribut4, 
     attribut15, 
     town_CODE 
having count(*) > 1 
+0

synatx錯誤是一個錯誤,當我縮短腳本 – domiSchenk 2012-01-12 13:29:05

+0

@rageit (錯誤地)改變問題的外殼是* not *有效的編輯 – PeeHaa 2014-05-19 18:53:56

3

「當我執行我們的服務器上此查詢它做工精細。但我的客戶的 服務器上,我得到Oracle錯誤ORA-00979: not a GROUP BY expression.

這意味着兩件事情之一:

  1. 您的服務器與客戶的服務器不同,並且該差別可防止出現錯誤;例如,您的服務器是更高版本或具有不同的修補程序級別。
  2. 實際上,您並不是在自己的客戶數據庫上運行相同的代碼。

後者似乎很可能,當你發佈這裏明顯的代碼是不是你自己的服務器上運行的代碼。正如其他人指出的那樣,它包含了一些語法錯誤,儘管事實上它們都不會拋出ORA-00979。

該錯誤表示您在投影中有一個非聚合列,它不在GROUP BY子句中,或者您可能在GROUP BY子句中有某些不在投影中的東西。

+0

well Nr.2是不是coze代碼是相同的,或者複製和粘貼改變了代碼對於DB版本選擇'SELECT * FROM product_component_version;'顯示相同的結果(見我的文章) – domiSchenk 2012-01-12 13:35:45