2015-04-15 3 views
0

Две таблицы я пытаюсь присоединиться:полное внешнее соединение соответствие по нескольким критериям

TABLEA: эта таблица содержит все приводит нас завоеванных BID и SOURCE и DATE.

Bid Amount = tableA.price, Source = tableA.lead_source_id, Date = tableA.time 

TableB: эта таблица содержит все приводит нас утерянный BID и SOURCE и DATE.

Bid Amount = tableB.cost, Source = tableB.lead_source_id, Date = tableB.bid_at 

Я хотел бы быть в состоянии возвратить число заявок мы выигрываются и проигрываются по BID и SOURCE и DATE. Часто есть только записи в одной таблице или другой (мы выиграли все ставки или потеряли все ставки), поэтому кажется, что внешнее соединение необходимо.

Идеальный выход будет группировать по lead_source_id, BID, и время, как, например:

Lead Source ID, Date, Bid Amount, Won, Lost 

1, 1/1/2015, $20, 5, 0 

1, 1/1/2015, $25, 0, 9 

5, 1/1/2015, $30, 1, 1 

10, 1/2/2015, $50, 0, 1 

10, 1/2/2015, $55, 1, 0 
+0

Не могли бы вы прояснить, что означает третий ряд в вашем примере (5, 1/1/2015, $ 30, 1, 1)? Является ли значение $ 30 (сумма ставки) разницей между «выигранным» и «потерянным»? Было бы лучше, если бы вы добавили исходные данные для этого примера. – olga

+0

Извините за любую путаницу и благодарю вас за ответ. Третья строка будет указывать: 1/1/2015, для lead_source_id = 5, одна ставка выиграла за $ 30 в таблицеA (tableA.price = $ 30, tableA.lead_source_id = 5, tableA.time = 1/1/2015) И одна ставка потеряна за $ 30 в таблицеB (tableB.cost = $ 30, tableB.lead_source_id = 5, tableB.bid_at = 1/1/2015). – Johnny

+0

Спасибо за ответ, Ольга. Получение следующего: «У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с« tmp AS »( SELECT lead_source_id, [время] AS [Дата], цена, COUNT (*) AS выиграл, 0 AS 'в строке 1 " – Johnny

ответ

0

Попробуйте следующий запрос.

;WITH tmp AS (
SELECT lead_source_id, [time] AS [Date], price, COUNT(*) AS won, 0 AS lost 
FROM tableA 
GROUP BY lead_source_id, [time], price 
UNION ALL 
SELECT lead_source_id, bid_at AS [Date], cost AS price, 0 AS won, COUNT(*) AS lost 
FROM tableB 
GROUP BY lead_source_id, bid_at, cost) 

SELECT lead_source_id AS [Lead Source ID], [Date], price AS [Bid Amount], SUM(won) AS Won , SUM(lost) AS Lost 
FROM tmp 
GROUP BY lead_source_id, [Date], price 
ORDER BY lead_source_id, [Date] 

Распространенное выражение таблицы (ТМП) вычисляет количество выигранных/потерянных заявок и внешних групп выберите свои данные, идентификатор, дата и ставок.

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