簡體   English   中英

消除零值並將值放在一行中的兩個不同列中

[英]Eliminate zero values and put values in two different columns in one row

DB-小提琴

CREATE TABLE check_inbound 
(
    id SERIAL PRIMARY KEY,
    data_source VARCHAR,
    product VARCHAR,
    inbound_type VARCHAR,
    quantity DECIMAL
);

INSERT INTO check_inbound (data_source, product, inbound_type, quantity)
VALUES 
('data_source_01', 'product_a', 'type_01', '500'),
('data_source_01', 'product_a', 'type_02', '200'),
('data_source_01', 'product_b', 'type_01', '130'),
('data_source_01', 'product_b', 'type_02', '320'),
('data_source_01', 'product_c', 'type_01', '700'),
('data_source_01', 'product_c', 'type_02', '850'),

('data_source_02', 'product_a', 'type_01', '980'),
('data_source_02', 'product_a', 'type_02', '315'),
('data_source_02', 'product_b', 'type_01', '760'),
('data_source_02', 'product_b', 'type_02', '512'),
('data_source_02', 'product_c', 'type_01', '125'),
('data_source_02', 'product_c', 'type_02', '720');

預期結果:

產品 入站類型 數量_數據_來源_01 數量_數據_來源_02
產品_a type_01 500 980
產品_a type_02 200 315
產品_b type_01 130 760
產品_b type_02 320 512
產品_c type_01 700 125
產品_c type_02 850 720

我想比較兩個不同data_sources中每個productinbound_typequantity

我能夠通過這個查詢接近結果:

SELECT
    i.data_source AS date_source,
    i.product AS product,
    i.inbound_type AS inbound_type,
    (CASE WHEN i.data_source = 'data_source_01' THEN SUM(i.quantity) ELSE 0 END) AS quantity_data_source_01,
    (CASE WHEN i.data_source = 'data_source_02' THEN SUM(i.quantity) ELSE 0 END) AS quantity_data_source_02
FROM 
    check_inbound i
GROUP BY 
    1, 2, 3
ORDER BY 2,1

但是,我無法弄清楚如何擺脫具有零值的行並將數量放在與預期結果相同的行上。

你知道我需要改變什么才能讓它工作嗎?

您在此處執行 pivot 查詢,並且應該僅按產品和類型進行聚合。 我建議在這里使用MAXFILTER

SELECT
    i.product AS product,
    i.inbound_type AS inbound_type,
    MAX(i.quantity) FILTER (WHERE i.data_source = 'data_source_01') AS quantity_data_source_01,
    MAX(i.quantity) FILTER (WHERE i.data_source = 'data_source_02') AS quantity_data_source_02
FROM check_inbound i
GROUP BY 1, 2
ORDER BY 2, 1;

如果您想使用CASE表達式,請使用此版本,例如

MAX(CASE WHEN i.data_source = 'data_source_01'
         THEN i.quantity END) AS quantity_data_source_01

暫無
暫無

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

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