Выберите запрос из трех таблиц

0

У меня есть таблицы клиентов, кампаний, сделок и фактов2. Я написал такой запрос, как показано ниже, как

SELECT id,
(select customer.name from customer where customer.id = facts2.customer_id) 
  AS Customername,
(select campaign.name from campaign where campaign.id = facts2.campaign_id) 
  AS Campaignname,
(select deal.name from jb_deal where deal.id = facts2.deal_id) 
  AS Dealname,
revenue 
from facts2; 
    +--------------+-------------+-------------------+----------+
    | Customername | Campaignanme |  Dealname         |  revenue |
    +-------------+-------------+-------------------------------+
    |           A |       Camp1 |               Deal1 |   100  |
    |           A |       Camp1 |               Deal2 |   200  | 
    |           A |       Camp2 |               Deal3 |   300  |
    |           B |       CampB |              DealB1 |   100  |
    |           B |       CampB |              DealB2 |   200  |
    |           C |       CampC |               Deal3 |   300  |
    +-------------+-------------+--------------------------------+

Я хочу отобразить таблицу sql без повторения имен клиентов и имен кампаний, как показано ниже.

    +--------------+-------------+-------------------+----------+
    | customername | campaignanme | dealname         |  Revenue |
    +-------------+-------------+-------------------------------+
    |           A |       Camp1 |               Deal1 |   100  |
    |             |             |               Deal2 |   200  | 
    |             |       Camp2 |               Deal3 |   300  |
    |           B |       CampB |              DealB1 |   100  |
    |             |             |              DealB2 |   200  |
    |           C |       CampC |               Deal3 |   300  |
    +-------------+-------------+--------------------------------+
  • 6
    Я думаю, что это больше вопрос презентации, а не базы данных.
  • 0
    join = cartesian product , вместо этого вы можете попробовать union
Теги:

1 ответ

0

Вы не сможете сделать это, тем не менее, вы можете использовать UNION для принятия различных записей. Если вы хотите, вы можете так выглядеть.

SELECT `result`.`Customername`,`result`.`Campaignname`,
GROUP_CONCAT(`result`.`Dealname`) AS `Dealname`,SUM(`revenue`) AS `revenue` FROM (SELECT id,
(select customer.name from customer where customer.id = facts2.customer_id) 
  AS Customername,
(select campaign.name from campaign where campaign.id = facts2.campaign_id) 
  AS Campaignname,
(select deal.name from jb_deal where deal.id = facts2.deal_id) 
  AS Dealname,
revenue 
from facts2) AS `result` GROUP BY `result`.`Campaignname`,`result`.`Customername`; 

результат будет таким, каким он выглядит

+--------------+-------------+-------------------+----------+
| Customername | Campaignanme |  Dealname        |  revenue |
+-------------+-------------+-------------------------------+
|           A |       Camp1 |         Deal1,Deal2 |   300  |
|           A |       Camp2 |               Deal3 |   300  |
|           B |       CampB |       DealB1,DealB2 |   300  |
|           C |       CampC |               Deal3 |   300  |
+-------------+-------------+--------------------------------+

Ещё вопросы

Сообщество Overcoder
Наверх
Меню