2

みなさん、こんにちは。posgresqlで複雑なクエリを作成するのにいくつかの課題があります。事実、私はこの特定のクエリ期間を書くのに問題があり、あなたの助けが親切に必要とされています。それを手に入れましょう。

これが私のテーブルです

[products_tb]         [client_tb]          [sales_tb]
+--------------+      +-------------+      +-------------+--------------+-----+
| product_name |      | client_name |      | client_name | product_name | qty | 
+--------------+      +-------------+      +-------------+--------------+-----+
| shoe         |      | john        |      | john        | shoe         | 20  |
+--------------+      +-------------+      +-------------+--------------+-----+
| belt         |      | bob         |      | john        | belt         | 9   |
+--------------+      +-------------+      +-------------+--------------+-----+
                      | kim         |      | bob         | shoe         | 2   |
                      +-------------+      +-------------+--------------+-----+
                                           | bob         | belt         | 98  |
                                           +-------------+--------------+-----+
                                           | kim         | shoe         | 46  |
                                           +-------------+--------------+-----+
                                           | kim         | belt         | 3   |
                                           +-------------+--------------+-----+


[query output] # this output will be displayed using php and html
+----------+-------+------+-----+-----+
| products | Total | john | bob | kim |
+----------+-------+------+-----+-----+
| shoe     | 68    | 20   | 2   | 46  |
+----------+-------+------+-----+-----+
| belt     | 110   | 9    | 98  | 3   |
+----------+-------+------+-----+-----+

テーブル[クエリ出力]を生成できるクエリを作成しようとしています。どんな助けでも大歓迎です。

どうもありがとうございます。

4

2 に答える 2

0

標準SQLを使用してこれを行う1つの方法は次のとおりです。

SELECT st.product_name AS products,
       SUM(st.qty) AS Total,
       (SELECT SUM(st_john.qty)
        FROM sales_tb st_john
        WHERE client_name = 'john' AND st_john.product_name = st.product_name) AS john,
       (SELECT SUM(st_bob.qty)
        FROM sales_tb st_bob
        WHERE client_name = 'bob' AND st_bob.product_name = st.product_name) AS bob,
       (SELECT SUM(st_kim.qty)
        FROM sales_tb st_kim
        WHERE client_name = 'kim' AND st_kim.product_name = st.product_name) AS kim
FROM sales_tb st
GROUP BY product_name

SQLFiddleデモを参照してください

于 2013-03-11T11:10:50.630 に答える
0

cross_tabを使用しないバージョン:

select p.product_name, sum(s.qty), 
sum(CASE WHEN c.client_name='john' THEN s.qty END) as john,
sum(CASE WHEN c.client_name='bob' THEN s.qty END) as bob,
sum(CASE WHEN c.client_name='kim' THEN s.qty END) as kim
   from products_tb AS p 
   JOIN sales_tb AS s ON p.product_name=s.product_name
   JOIN clients_tb AS c ON c.client_name=s.client_name
   GROUP BY p.product_name;

http://sqlfiddle.com/#!12/afc9a/10

于 2013-03-11T11:43:21.733 に答える