簡體   English   中英

普遍的PSQL GROUP BY子句

[英]Pervasive PSQL GROUP BY Clause

我在Pervasive V11數據庫上執行以下以下SQL調用。 我正在努力工作,以便每個項目ID僅獲得一行。

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;

現在,如果我在Group By子句中沒有列出trx_type,stocked_by_factor或unit_weight,則會從數據庫收到錯誤消息。

刪除這些字段會導致此錯誤:

列無效。 必須按列分組:SELECT LIST中的trx_type。

以下是完整的SQL調用的示例結果:

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

任何幫助是極大的贊賞。 謝謝!!

條件應該是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, 

沒關系...經過數小時的思考,答案就在我眼前。 我只需要將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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM