2011-01-20 2 views
0

У меня есть таблицы клиентов, кампании, предложения и facts2 .Я написал запрос, как показано ниже, чтобы увидеть, какВыберите запрос из трех таблиц

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', вы можете попробовать – ajreal

ответ

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 | 
+-------------+-------------+--------------------------------+ 
Смежные вопросы