こんにちは、godwon、productName、quantity というフィールドを持つテーブルがあります。結果を取得したいのですが、製品については画像を確認してください
godown は修正されていないことを覚えておいてください。ユーザーによっては、2 回の godowns または 100 回の godowns になる可能性があります。
こんにちは、godwon、productName、quantity というフィールドを持つテーブルがあります。結果を取得したいのですが、製品については画像を確認してください
godown は修正されていないことを覚えておいてください。ユーザーによっては、2 回の godowns または 100 回の godowns になる可能性があります。
解決策はデータによって異なります。'Godown' 値は 6 つしかありませんか? その場合は、以下の解決策を試すことができます。
CREATE TABLE my_table (
godown VARCHAR2(20),
product_name VARCHAR2(20),
quantity NUMBER
);
INSERT INTO my_table VALUES ('Godown1', 'Rice', 5);
INSERT INTO my_table VALUES ('Godown1', 'Tea', 6);
INSERT INTO my_table VALUES ('Godown1', 'Milk', 4);
INSERT INTO my_table VALUES ('Godown2', 'Rice', 6);
INSERT INTO my_table VALUES ('Godown2', 'Tea', 7);
INSERT INTO my_table VALUES ('Godown2', 'Milk', 5);
INSERT INTO my_table VALUES ('Godown3', 'Rice', 8);
INSERT INTO my_table VALUES ('Godown3', 'Tea', 3);
INSERT INTO my_table VALUES ('Godown3', 'Milk', 5);
INSERT INTO my_table VALUES ('Godown4', 'Rice', 3);
INSERT INTO my_table VALUES ('Godown4', 'Tea', 2);
INSERT INTO my_table VALUES ('Godown4', 'Milk', 1);
INSERT INTO my_table VALUES ('Godown5', 'Rice', 4);
INSERT INTO my_table VALUES ('Godown5', 'Tea', 6);
INSERT INTO my_table VALUES ('Godown5', 'Milk', 7);
INSERT INTO my_table VALUES ('Godown6', 'Rice', 9);
INSERT INTO my_table VALUES ('Godown6', 'Tea', 24);
INSERT INTO my_table VALUES ('Godown6', 'Milk', 12);
COMMIT;
SELECT
product_name,
godown1_sum_quantity AS Godown1,
godown2_sum_quantity AS Godown2,
godown3_sum_quantity AS Godown3,
godown4_sum_quantity AS Godown4,
godown5_sum_quantity AS Godown5,
godown6_sum_quantity AS Godown6,
(SELECT SUM(quantity) FROM my_table WHERE product_name = data.product_name) AS Total
FROM (
SELECT
product_name,
godown,
quantity
FROM my_table
)
PIVOT (SUM(quantity) AS sum_quantity
FOR (godown) IN (
'Godown1' AS Godown1,
'Godown2' AS Godown2,
'Godown3' AS Godown3,
'Godown4' AS Godown4,
'Godown5' AS Godown5,
'Godown6' AS Godown6
)
) data
;
SQLFiddle で確認してください: http://sqlfiddle.com/#!4/5f8e8/1
集計関数で CASE ステートメントを使用できます。
SELECT product_name,
MIN (CASE WHEN godown = 'godown1' THEN quantity END) godown1,
MIN (CASE WHEN godown = 'godown2' THEN quantity END) godown2,
MIN (CASE WHEN godown = 'godown3' THEN quantity END) godown3,
MIN (CASE WHEN godown = 'godown4' THEN quantity END) godown4,
MIN (CASE WHEN godown = 'godown5' THEN quantity END) godown5,
MIN (CASE WHEN godown = 'godown6' THEN quantity END) godown6,
SUM (quantity)
FROM products
GROUP BY product_name;
11g では PIVOT 演算子も使用できますが、最終的な合計列は表示されません。別途計算する必要があります。
SELECT *
FROM (SELECT godown, product_name, quantity FROM products)
PIVOT (MIN (
quantity)
FOR (godown)
IN ('godown1' AS godown1,
'godown2' AS godown2,
'godown3' AS godown3,
'godown4' AS godown4,
'godown5' AS godown5,
'godown6' AS godown6));