2013-07-04 4 views
0

Я просто хочу спросить, как присоединиться к двум запросам с единственным значением . Один из них - WHERE c.transac_type = 0, а другой - WHERE c.transac_type = 1".Заявление об объединении MySQL

Я хочу видеть результат SUM (c.amount) в условии WHERE c.transac_type = 0 и WHERE c.transac_type = 1, потому что они имеют разный вывод SUM (c.amount).

SELECT a.id, a.branch_code, SUM(c.amount), d.category, e.branch_commission 
FROM control_panel_client_create AS a 
    RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
    RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
    RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id 
    INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id 
    WHERE c.transac_type = 0 
GROUP BY d.category, b.branch_code_id ORDER BY SUM(c.amount) DESC 
+3

Почему не 'WHERE c.transac_type IN (0, 1) 'вместо' UNION' ?? –

+0

mysqli - неправильный тег здесь –

+0

Просто FYI, термины «[mysql] и« right join »теперь отображаются в SO 952 раза. Сравните это с «[mysql] и« left join », которые появляются 22935 раз ... Я просто говорю. – Strawberry

ответ

1

Если вы хотите суммы для типов транзакций в двух разных колонках, то вы хотите использовать условную агрегацию:

SELECT a.id, a.branch_code, SUM(c.amount) as totAmount, 
     sum(case when c.transac_type = 0 then c.amount end) as Trans0_Amount, 
     sum(case when c.transac_type = 1 then c.amount end) as Trans1_Amount, 
     d.category, e.branch_commission 
FROM control_panel_client_create AS a 
RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id 
INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id 
WHERE c.transac_type IN (0, 1) 
GROUP BY d.category, b.branch_code_id 
ORDER BY SUM(c.amount) DESC 
+0

OMG! Это то, что мне нужно. Спасибо за помощь. Уже использую это :) и отлично работает :) – Yassi

0

UNIONing было бы довольно просто, но не уверен, что это даст вам полезные значения

SELECT a.id, a.branch_code, SUM(c.amount) AS AmountSum, d.category, e.branch_commission 
FROM control_panel_client_create AS a 
    RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
    RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
    RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id 
    INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id 
    WHERE c.transac_type = 0 
GROUP BY d.category, b.branch_code_id 
UNION 
SELECT a.id, a.branch_code, SUM(c.amount) AS AmountSum, d.category, e.branch_commission 
FROM control_panel_client_create AS a 
    RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
    RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
    RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id 
    INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id 
    WHERE c.transac_type = 1 
GROUP BY d.category, b.branch_code_id 
ORDER BY AmountSum DESC 

Вы можете просто получить сумму для обоих типов сделкам

SELECT a.id, a.branch_code, SUM(c.amount) AS AmountSum, d.category, e.branch_commission 
FROM control_panel_client_create AS a 
    RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
    RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
    RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id 
    INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id 
    WHERE c.transac_type IN (0, 1) 
GROUP BY d.category, b.branch_code_id 
ORDER BY AmountSum DESC 

Или сумм для обоих отдельно

SELECT a.id, a.branch_code, SUM(c.amount) AS AmountSum, d.category, e.branch_commission , c.transac_type 
FROM control_panel_client_create AS a 
    RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
    RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
    RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id 
    INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id 
    WHERE c.transac_type IN (0, 1) 
GROUP BY d.category, b.branch_code_id, c.transac_type 
ORDER BY AmountSum DESC 

Насти способ положить оба счетчика на одной и той же линии: -

SELECT a.id, a.branch_code, SUM(IF(c.transac_type=0,c.amount, 0)) AS AmountSumTransac_0, SUM(IF(c.transac_type=1, c.amount, 0)) AS AmountSumTransac_1, d.category, e.branch_commission 
FROM control_panel_client_create AS a 
    RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
    RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
    RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id 
    INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id 
    WHERE c.transac_type IN (0, 1) 
GROUP BY d.category, b.branch_code_id 
ORDER BY AmountSum DESC 
+0

Я хочу видеть вывод SUM (c.amount) в условии WHERE c.transac_type = 0 и WHERE c.transac_type = 1, потому что у них разный вывод SUM (c.amount) - – Yassi

+0

Последний запрос должен делать (добавлен c.transac_type в GROUP BY, а также изменил проверку на IN). – Kickstart

+0

Возможно ли, что я могу отделить столбец для SUM (c.amount) для WHERE c.transac_type = 0 и еще один столбец для SUM (c.amount) для WHERE c.transac_type = 1 – Yassi

1

вы можете просто использовать IN(0,1) вместо союза.

попробовать это

SELECT a.id, a.branch_code, SUM(c.amount), d.category, e.branch_commission 
FROM control_panel_client_create AS a 
RIGHT JOIN sales_add_h AS b ON a.id = b.branch_code_id 
RIGHT JOIN sales_add_i AS c ON b.id = c.sales_h_id 
RIGHT JOIN control_panel_item_create AS d ON c.item_code_id = d.id 
INNER JOIN control_panel_client_create AS e ON b.branch_code_id = e.id 
WHERE c.transac_type IN (0, 1) 
GROUP BY d.category, b.branch_code_id,c.transac_type ORDER BY SUM(c.amount) DESC 
+0

Я хочу видеть вывод SUM (c.amount) в состоянии WHERE c.transac_type = 0 и WHERE c.transac_type = 1, потому что они имеют другой вывод SUM (c.amount) – Yassi

+0

, то добавьте 'c.transac_type' в группу, проверив мой обновленный ответ –

+0

Возможно ли, что я могу выделить столбец для SUM (c.amount) для WHERE c.transac_type = 0 и другой столбец для SUM (c.amount) для WHERE c.transac_type = 1. – Yassi

Смежные вопросы