2014-12-05 2 views
1

Я хочу объединить эти два запроса с двумя капитаном должен быть равен:Как объединить два MySQL запросов

select distinct(captain_name),sum(finaldiscount) as tot,payment_mode 
from order_master 
where payment_mode='card' 
group by captain_name 

select distinct(captain_name),sum(finaldiscount) as tot,payment_mode 
from order_master 
where payment_mode='cash' 
group by captain_name 
+0

Зачем комбинировать тот же запрос? Я не вижу разницы между запросами. –

+0

Оба запроса выглядят одинаково: –

+0

было неправильно отредактировано, в первом запросе была 'payment_mode = 'card''. –

ответ

0

комбинат может быть РЕГИСТРИРУЙТЕСЬ или UNION

Для РЕГИСТРИРУЙТЕСЬ :

Select * 
from 
(select distinct(captain_name) capName,sum(finaldiscount) as tot,payment_mode from order_master where payment_mode='card' group by captain_name) t1 
INNER JOIN 
(select distinct(captain_name) capName,sum(finaldiscount) as tot,payment_mode from order_master where payment_mode='cash' group by captain_name) t2 on t1.capName = t2.capName 

UN ION:

Select * 
    from 
    (select distinct(captain_name) capName,sum(finaldiscount) as tot,payment_mode from order_master where payment_mode='card' group by captain_name) t1 
    UNION 
    (select distinct(captain_name) capName,sum(finaldiscount) as tot,payment_mode from order_master where payment_mode='cash' group by captain_name) t2 
0

Попробуйте это:

SELECT captain_name, 
     SUM(CASE WHEN payment_mode = 'cash' THEN finaldiscount ELSE 0 END) AS cashTotal, 
     SUM(CASE WHEN payment_mode = 'card' THEN finaldiscount ELSE 0 END) AS cardTotal 
FROM order_master 
WHERE payment_mode IN ('cash', 'card') 
GROUP BY captain_name 

ИЛИ

SELECT captain_name, payment_mode, SUM(finaldiscount) total 
FROM order_master 
WHERE payment_mode IN ('cash', 'card') 
GROUP BY captain_name, payment_mode 
0

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

SELECT captain_name, 
     Sum(finaldiscount) AS tot, 
     payment_mode 
FROM order_master 
WHERE payment_mode IN('cash', 'card') 
     AND captain_name IN (SELECT captain_name 
          FROM order_master 
          WHERE payment_mode IN('cash', 'card') 
          GROUP BY captain_name 
          HAVING Count(DISTINCT payment_mode) = 2) 
GROUP BY captain_name,payment_mode 

суб-запрос будет возвращать только й ose captain_name, которые имеют как payment_mode, т. е. card и cash. затем выберите строки из них captain_name и group by по captain_name,payment_mode.

и если вы не хотите, отдельные строки для card и cash затем использовать это:

SELECT captain_name,SUM(finaldiscount) 
FROM order_master 
WHERE payment_mode IN('cash', 'card') 
GROUP BY captain_name 
HAVING Count(DISTINCT payment_mode) = 2 

Примечание: Я предположил, что two captain should be equal означает только те капитана, которые возвращаются на оба запроса, должны быть возвращены в сочетании запрос.

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