0

カテゴリ内のベンダーからの結果を含むマトリックス テーブルを表示しようとしています。お気に入り:

+-----------+-------------+-------------+------+
|           | Category 1  | Category 2  | ...  |
+-----------+-------------+-------------+------+
| Vendor 1  |       8900  |          0  | ...  |
| Vendor 2  |      56890  |       4000  | ...  |
|      ...  |        ...  |        ...  | ...  |
+-----------+-------------+-------------+------+

私はすでに 1 つのベンダーに対してクエリを作成しました。

SELECT ut.unit_name, IFNULL(SUM(commission_fix_out),0)
FROM transaction t
JOIN office_per_transaction opt
ON t.id = opt.transaction_id
JOIN_vendor_per_transaction ppt
ON t.id = ppt.transaction_id
AND ppt.vendor_id = 2
RIGHT JOIN unit_type ut
ON t.unit_type_id = ut.id
AND transaction_end_week BETWEEN 0 AND 14
AND YEAR(transaction_end_date) = 2012
GROUP BY ut.id

これにより、次の結果が得られます。

+-------------+---------+
| Category    | Result  |
+-------------+---------+
| Category 1  |  56890  |
| Category 2  |   4000  |
|        ...  |    ...  |
+-------------+---------+

ここで、特定のオフィスのベンダーごとにこのクエリを連結したいと考えています。

まず、 で置き換えAND ppt.vendor_id = 2てみましAND ppt.vendor_id IN (SELECT id FROM vendor WHERE office_id = 1)たが、そのオフィスのすべてのベンダーの合計結果が得られました。

次に、サブクエリを使用してみました。しかし、それは未知の列を示すエラーを私に与えました。

私が達成したいのは、次のような結果セットです:

+-----------+--------- -------+
| Vendor    | Results         |
+-----------+-----------------+
| Vendor 1  | 8900,0,...      |
| Vendor 2  | 56890,4000,...  |
| ...       | ...,...,...     |
+-----------+-----------------+

私は非現実的なことをしようとしていますか?ベンダーごとに上記のクエリを実行する必要がありますか? または、ここで何か不足していますか?

@SashiKant私は最近多くのクエリを試しましたが、次のようなものでした:

SELECT v.id, GROUP_CONCAT(r.result) FROM vendor v, 
   ( SELECT ut.unit_name, IFNULL(SUM(commission_fix_out),0) as result 
     FROM transaction t JOIN office_per_transaction opt ON t.id = opt.transaction_id 
     JOIN vendor_per_transaction ppt ON t.id = ppt.transaction_id 
     AND ppt.vendor_id = p.id 
     RIGHT JOIN unit_type ut ON unit_type_id = ut.id 
     AND transaction_end_week BETWEEN 0 AND 14 
     AND YEAR(transaction_end_date) = 2012 GROUP BY ut.id) as r
4

2 に答える 2

0

使用できますgroup_concat

疑似 SQL:

select vendor, group_concat(result)
from mytable
group by vendor

ビューを作成することで「単純化」できます。あなたのテーブル構造がわからないので、これは単なる推測です

create view commissions as
    SELECT ppt.vendor_id as vendor, ut.unit_name as category,
           IFNULL(SUM(commission_fix_out),0) as commission
    FROM transaction t
    JOIN office_per_transaction opt
    ON t.id = opt.transaction_id
    JOIN_vendor_per_transaction ppt
    ON t.id = ppt.transaction_id
    RIGHT JOIN unit_type ut
    ON t.unit_type_id = ut.id
    AND transaction_end_week BETWEEN 0 AND 14
    AND YEAR(transaction_end_date) = 2012
    GROUP BY ppt.vendor_id, ut.id;

選択します

select vendor, group_concat(commission)
from commissions
group by vendor;
于 2012-11-27T09:37:38.217 に答える
0

(単一のベンダーではなく) 必要なベンダーを取得するには、おそらく vendors テーブルに参加する必要があります。また、GROUP BY にさらに句が必要です (そして、GROUP BY 句で SELECT のすべての非集計列を実際に使用する必要があります。mysql は反対しませんが、SQL のほとんどのフレーバーは、一部を見逃した場合に反対します)。

このようなもの(テストされていないため、タイプミスは許してください)

SELECT vendor_id, ut.id, ut.unit_name, IFNULL(SUM(commission_fix_out),0)
FROM transaction t
INNER JOIN office_per_transaction opt
ON t.id = opt.transaction_id
INNER JOIN_vendor_per_transaction ppt
ON t.id = ppt.transaction_id
INNER JOIN vendor ve
ON ve.id = ppt.vendor_id 
RIGHT JOIN unit_type ut
ON t.unit_type_id = ut.id
AND transaction_end_week BETWEEN 0 AND 14
AND YEAR(transaction_end_date) = 2012
WHERE ve.office_id = 1
GROUP BY vendor_id, ut.id, ut.unit_name
ORDER BY vendor_id, ut.id, ut.unit_name

そのベンダーのすべての金額を 1 つの列で示すベンダーごとの行が必要な場合は、次のようになります。

SELECT vendor_id, GROUP_CONCAT(CommisionAmount)
FROM (
SELECT vendor_id, ut.id, ut.unit_name, IFNULL(SUM(commission_fix_out),0) AS CommisionAmount
FROM transaction t
INNER JOIN office_per_transaction opt
ON t.id = opt.transaction_id
INNER JOIN_vendor_per_transaction ppt
ON t.id = ppt.transaction_id
INNER JOIN vendor ve
ON ve.id = ppt.vendor_id 
RIGHT JOIN unit_type ut
ON t.unit_type_id = ut.id
AND transaction_end_week BETWEEN 0 AND 14
AND YEAR(transaction_end_date) = 2012
WHERE ve.office_id = 1
GROUP BY vendor_id, ut.id, ut.unit_name
ORDER BY vendor_id, ut.id, ut.unit_name) Sub1 
于 2012-11-27T09:36:34.853 に答える