2016-07-29 3 views
0

Error after add group by and aggregation functionsオラクルクエリにしてグループを追加し、エラーに

enter image description here

を取得するこのクエリは、関数で集計し、グループなしで良い実行されます。 group by関数を集計した後、このエラーが表示されます。私はクエリの初心者です。あらゆる進歩が助けになるでしょう。同社はERPシステムとしてNetsuiteを使用しています。 NetsuiteはOracleデータベースを使用しています。私はODBCをデータベースに接続して使用しています。

Select to_number(to_char(Transactions.trandate, 'YYYY')) as Year, 
     to_number(to_char(Transactions.trandate, 'MM')) as Month, 
     NVL(Parent.name, Entity.name) as Customer, 
     Case 
      When Upper(Substr(Replace(Items.name,'.',''),1,4)) IN ('MEAL', 'BASE', 'BOLT', 'BITE', 'FUEL') 
      THEN Upper(Substr(Replace(Items.name,'.',''),1,4)) 
      ELSE Items.name 
     END as Item, 
     Accounts.type_name as Account, 
     -sum(Transaction_lines.amount) as Sales 
From Transactions 
Left Join Transaction_lines ON Transactions.transaction_id=Transaction_lines.Transaction_id 
Left Join Items ON Transaction_lines.item_id=Items.item_id 
Left Join Accounts ON Transaction_lines.account_id=Accounts.account_id 
Left Join Entity ON Transactions.entity_id=Entity.entity_id 
Left Join Entity as Parent on Entity.parent_id=Parent.entity_id 
Where transactions.trandate >= '2013-1-1' 
    and Transactions.transaction_type IN ('Invoice', 'Item Fulfillment', 'Cash Sale') 
    and Accounts.type_name IN ('Income', 'Expense', 'Cost of Goods Sold') 

Group By 
    to_number(to_char(Transactions.trandate, 'YYYY')), 
    to_number(to_char(Transactions.trandate, 'MM')), 
    NVL(Parent.name, Entity.name), 
    Case 
     When Upper(Substr(Replace(Items.name,'.',''),1,4)) IN ('MEAL', 'BASE', 'BOLT', 'BITE', 'FUEL') 
      THEN Upper(Substr(Replace(Items.name,'.',''),1,4)) 
      ELSE Items.name 
    END, 
    Accounts.type_name 
Order By Year, Month, Customer, Item, Account 
+0

私が投稿して画像が表示されなかった場合、私は自分のクエストを編集することができないように見えます。ここにエラーがあります。 DataSource.Error:ODBC:ERROR [42000] [NetSuite] [ODBC 64bitドライバ] [OpenAccess SDK SQL Engine]無効なSQL構文です。選択リストおよび順序のすべての列は、機能を設定するか、GROUP BY句の一部である必要があります。[10136] 詳細: DataSourceKind = Odbc DataSourcePath = dsn = Netsuite OdbcErrors =テーブル –

+0

エラーはイメージとしてではなく、テキストとして追加する方がよいでしょう。 – sstan

+0

エラーがクリアされているので、select ...と同じようにグループに同じagregationカラムを追加する必要があります。 'SELECT A、B、MAX(something)、MIN(something)' need 'GROUP A、B' –

答えて

0

あなたはGROUP BYのないクエリを使用します。

あなたのエイリアスを活用してください。

SELECT Year, Month, Customer, Item, Account, -sum(Amount) as Sales 
FROM ( 
     YOUR WORKING QUERY 
    ) T 
GROUP BY Year, Month, Customer, Item, Account 
Order By Year, Month, Customer, Item, Account 
+0

新しいエラーです。情報元。エラー:ODBC:ERROR [42S22] [NetSuite] [ODBC 64ビットドライバ] [OpenAccess SDK SQL Engine]無効な列:GROUP BYの年。[10132] 詳細: DataSourceKind = Odbc DataSourcePath = dsn = NetSuite OdbcErrors =テーブル –

+0

おそらく、「Year」は予約語です。 'intYear'のようなものを使ってみてください。以前のクエリの作業をしている場合は、列を減らしてみてください。たぶんいくつかのタイプミスがあります。 –

+0

ケースの選択 IN( 'MEAL'、 'BASE'、 'BOLT'、 'BITE'、 'FUEL')のUpper(Substr(Items.name、 '。'、 '')、1,4) THEN Upper(Substr(Items.name、 '。'、 '')、1,4)) ELSE Items.name アイテムとして終了、-sum(Transaction_lines.amount)as Sales ----削除されました。 Case文の列を除くすべての列。それでも同じエラー。たぶん私はグループでケースステートメントを使用することはできません?意味不明。 –

関連する問題