2017-08-15 8 views
0

私はPervasive V11データベースで以下のSQL呼び出しを行います。 私はそれを働かせて、アイテムIDごとに1行しか得られないようにしています。Pervasive PSQL GROUP BY句

SELECT 
    inventory_history.item_id AS 'ItemId', 
    RTrim(inventory_items.item_name) AS 'Description', 
    If(RTrim(trx_type) = 'P',SUM(change_quantity),'') AS 'QtyChangeP', 
    If(RTrim(trx_type) = 'P',SUM(history_cost_01+history_cost_02+history_cost_03+history_cost_04+history_cost_05+history_cost_06+history_cost_07+history_cost_08+history_cost_09+history_cost_10+history_cost_11+history_cost_12),'') AS 'CostChangeP', 
    If(RTrim(trx_type) = 'S',SUM(change_quantity),'') AS 'QtyChangeS', 
    If(RTrim(trx_type) = 'S',SUM(history_cost_01+history_cost_02+history_cost_03+history_cost_04+history_cost_05+history_cost_06+history_cost_07+history_cost_08+history_cost_09+history_cost_10+history_cost_11+history_cost_12),'') AS 'CostChangeS', 
    If(RTrim(trx_type) = 'A',SUM(change_quantity),'') AS 'QtyChangeA', 
    If(RTrim(trx_type) = 'A',SUM(history_cost_01+history_cost_02+history_cost_03+history_cost_04+history_cost_05+history_cost_06+history_cost_07+history_cost_08+history_cost_09+history_cost_10+history_cost_11+history_cost_12),'') AS 'CostChangeA', 
    If(RTrim(trx_type) = 'T',SUM(change_quantity),'') AS 'QtyChangeT', 
    If(RTrim(trx_type) = 'T',SUM(history_cost_01+history_cost_02+history_cost_03+history_cost_04+history_cost_05+history_cost_06+history_cost_07+history_cost_08+history_cost_09+history_cost_10+history_cost_11+history_cost_12),'') AS 'CostChangeT', 
    If(RTrim(inventory_categories.stocked_by_factor) = 'FT',inventory_items.unit_weight,'') AS 'WtPerFt' 
FROM 
    inventory_history 
INNER JOIN 
    inventory_items ON inventory_history.item_id = inventory_items.item_id 
INNER JOIN 
    inventory_categories ON inventory_items.category_id = inventory_categories.category_id 
WHERE 
    trx_date>'20170731' 
GROUP BY 
    inventory_history.item_id, inventory_items.item_name, trx_type, stocked_by_factor, unit_weight; 

それが今であると私はtrx_type、stocked_by_factor、またはunit_weightは、GROUP BY句にリストされていない場合、私は、データベースからのエラーを受け取ります。これらのフィールドを削除する

は、このエラーが発生:すべてのヘルプは大歓迎です

ItemId      Description                           QtyChangeP                 CostChangeP                  QtyChangeS                 CostChangeS                  QtyChangeA                 CostChangeA                  QtyChangeT                 CostChangeT   WtPerFt 
========================= ================================================== ============================================================================ ============================================================================ ============================================================================ ============================================================================ ============================================================================ ============================================================================ ============================================================================ ============================================================================ ============== 
1100SM19050T2C1    1100-H19 LAMI SHIM .050" TYPE 2, CLASS 1                     58.2400                   890.00                   0.0000                   0.00                   0.0000                   0.00                   0.0000                   0.00   0.000000 
1100SM19050T2C1    1100-H19 LAMI SHIM .050" TYPE 2, CLASS 1                     0.0000                   0.00                  58.2400                   890.00                   0.0000                   0.00                   0.0000                   0.00   0.000000 
1100SM19085T2C1    1100-H19 LAMI SHIM .085" TYPE 2, CLASS 1                     0.0000                   0.00                   0.0000                   0.00                   0.0000                   0.00                   0.0000                   0.00   0.000000 
1100SM19085T2C1    1100-H19 LAMI SHIM .085" TYPE 2, CLASS 1                     19.8080                   208.00                   0.0000                   0.00                   0.0000                   0.00                   0.0000                   0.00   0.000000 
1100SM19085T2C1    1100-H19 LAMI SHIM .085" TYPE 2, CLASS 1                     0.0000                   0.00                  19.8080                   208.00                   0.0000                   0.00                   0.0000                   0.00   0.000000 

:ここ

Column invalid. Must be a group by column: trx_type in SELECT LIST.

は完全なSQLの呼び出しのサンプル結果です。ありがとう!!

答えて

0

気にしないで...私の脳をラッキングの時間後に、答えは私の目の前にあった。私は、If()関数をSUM()関数に変える必要がありました。

は、ここでの作業コールです:

SELECT 
    inventory_history.item_id AS 'ItemId', 
    RTrim(inventory_items.item_name) AS 'Description', 
    SUM(If(RTrim(trx_type) = 'P',inventory_history.change_quantity,0)) AS 'QtyChangeP', 
    SUM(If(RTrim(trx_type) = 'P',(history_cost_01+history_cost_02+history_cost_03+history_cost_04+history_cost_05+history_cost_06+history_cost_07+history_cost_08+history_cost_09+history_cost_10+history_cost_11+history_cost_12),0)) AS 'CostChangeP', 
    SUM(If(RTrim(trx_type) = 'S',inventory_history.change_quantity,0)) AS 'QtyChangeS', 
    SUM(If(RTrim(trx_type) = 'S',(history_cost_01+history_cost_02+history_cost_03+history_cost_04+history_cost_05+history_cost_06+history_cost_07+history_cost_08+history_cost_09+history_cost_10+history_cost_11+history_cost_12),0)) AS 'CostChangeS', 
    SUM(If(RTrim(trx_type) = 'A',inventory_history.change_quantity,0)) AS 'QtyChangeA', 
    SUM(If(RTrim(trx_type) = 'A',(history_cost_01+history_cost_02+history_cost_03+history_cost_04+history_cost_05+history_cost_06+history_cost_07+history_cost_08+history_cost_09+history_cost_10+history_cost_11+history_cost_12),0)) AS 'CostChangeA', 
    SUM(If(RTrim(trx_type) = 'T',inventory_history.change_quantity,0)) AS 'QtyChangeT', 
    SUM(If(RTrim(trx_type) = 'T',(history_cost_01+history_cost_02+history_cost_03+history_cost_04+history_cost_05+history_cost_06+history_cost_07+history_cost_08+history_cost_09+history_cost_10+history_cost_11+history_cost_12),0)) AS 'CostChangeT', 
    If(RTrim(inventory_categories.stocked_by_factor) = 'FT',inventory_items.unit_weight,'') AS 'WtPerFt' 
FROM 
    inventory_history 
INNER JOIN 
    inventory_items ON inventory_history.item_id = inventory_items.item_id 
INNER JOIN 
    inventory_categories ON inventory_items.category_id = inventory_categories.category_id 
WHERE 
    trx_date>'20170731' 
GROUP BY 
    inventory_history.item_id, inventory_items.item_name, stocked_by_factor, unit_weight; 
0

条件がsum()の引数でなければなりません:

sum(If(RTrim(trx_type) = 'P', change_quantity), 0) AS QtyChangeP, 

通常、これはcaseを使って書くことになります。

sum(case when RTrim(trx_type) = 'P' then change_quantity else 0 end) AS QtyChangeP, 
+0

はどうもありがとうございました!!私はポストボタンを押して、すぐに問題を見た。 –