Объединение влево считается из второй таблицы по трем признакам - PullRequest
0 голосов
/ 16 марта 2020

Примечание. У меня нет разрешений на запись в эту БД.

У меня есть таблица транзакций, в которой нужно подсчитать количество транзакций: DONE

SELECT
unique_id, 
journey_files_id, 
version_template_code, 
Count (*) as cnt

FROM [XXX].[dbo].[CampaignResponse]
WHERE version_template_code LIKE '%FPQ%'
AND CAST(email_action_date AS DATE) >='02/01/2020' and CAST(email_action_date AS DATE) <='02/29/2020'

GROUP BY unique_id, journey_files_id, version_template_code ORDER BY cnt DESC

Теперь мне нужно присоединить это представление ко второй таблице, используя unique_id, trip_files_id, version_template_code

CURRENT QUERY NOT WORKING:

SELECT DISTINCT *
FROM [XXX].[dbo].[EmailSend] a

LEFT JOIN
(
SELECT 
    unique_id, 
    journey_files_id, 
    version_template_code, 
    Count (email_action) as cnt

FROM [XXX].[dbo].[CampaignResponse]
WHERE version_template_code LIKE '%FPQ%'
AND CAST(email_action_date AS DATE) >='02/01/2020' and CAST(email_action_date AS DATE) <='02/29/2020'


) b ON a.unique_id = b.unique_id 
    AND a.journey_files_id = b.journey_files_id
    AND a.version_template_code = b.version_template_code

WHERE CAST(a.processed AS DATE) >='02/01/2020' and CAST(a.processed AS DATE) <='02/29/2020'
GROUP BY [id]
  ,a.[unique_id]
  ,a.[journey_files_id]
  ,a.[version_template_code]
  ,[ecrm_template_code]
  ,[lead_type]
  ,[quote_number]
  ,[email]
  ,[company_name]
  ,[sl_code]
  ,[kw_subject_line]
  ,[promo_line]
  ,[headline]
  ,[image_top]
  ,[learn_more]
  ,[tfn]
  ,[subhead_1]
  ,[body_copy_1]
  ,[subhead_2]
  ,[bullet_1]
  ,[offer]
  ,[video_img]
  ,[video_url]
  ,[video_copy]
  ,[legal]
  ,[kw_url_01]
  ,[kw_url_02]
  ,[variable_01]
  ,[variable_02]
  ,[tracking_pixel_url]
  ,[processed]
  ,b.cnt
  ,b.unique_id, b.journey_files_id, b.version_template_code
   ORDER BY b.unique_id

Сообщение об ошибке:

Сообщение 8120, уровень 16, состояние 1, строка 8
Столбец «AJM.dbo.CampaignResponse.unique_id» недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Что имеет смысл - я просто не могу придумать какую-то работу.

Помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Вам не нужно group by вне внутреннего запроса, поскольку вы не вычисляете какие-либо агрегатные значения за пределами. Вам просто нужно просто left join, как показано ниже:

SELECT DISTINCT *
FROM [XXX].[dbo].[EmailSend] a
left join (SELECT
unique_id, 
journey_files_id, 
version_template_code, 
Count (*) as cnt
FROM [XXX].[dbo].[CampaignResponse]
WHERE version_template_code LIKE '%FPQ%'
AND CAST(email_action_date AS DATE) >='02/01/2020' and CAST(email_action_date AS DATE) <='02/29/2020'
GROUP BY unique_id, journey_files_id, version_template_code) b
ON a.unique_id = b.unique_id AND a.journey_files_id = b.journey_files_id AND a.version_template_code = b.version_template_code 
ORDER BY cnt DESC
0 голосов
/ 16 марта 2020

Группировать только в этой таблице (также отредактированные даты и диапазон дат для безопасности):

with b as 
(
SELECT
unique_id, 
journey_files_id, 
version_template_code, 
Count (*) as cnt

FROM [XXX].[dbo].[CampaignResponse]
WHERE version_template_code LIKE '%FPQ%'
AND CAST(email_action_date AS DATE) >='20200201' and CAST(email_action_date AS DATE) < '20200301'

GROUP BY unique_id, journey_files_id, version_template_code
)
SELECT DISTINCT *
FROM [XXX].[dbo].[EmailSend] a
LEFT JOIN
 b ON a.unique_id = b.unique_id 
    AND a.journey_files_id = b.journey_files_id
    AND a.version_template_code = b.version_template_code
WHERE CAST(a.processed AS DATE) >='20200201' and CAST(a.processed AS DATE) <'20200301'
   ORDER BY b.unique_id

РЕДАКТИРОВАТЬ: То же самое с подзапросом, если вы хотите:

SELECT DISTINCT *
FROM [XXX].[dbo].[EmailSend] a
LEFT JOIN
(
SELECT
unique_id, 
journey_files_id, 
version_template_code, 
Count (*) as cnt

FROM [XXX].[dbo].[CampaignResponse]
WHERE version_template_code LIKE '%FPQ%'
AND CAST(email_action_date AS DATE) >='20200201' and CAST(email_action_date AS DATE) < '20200301'

GROUP BY unique_id, journey_files_id, version_template_code
)
 b ON a.unique_id = b.unique_id 
    AND a.journey_files_id = b.journey_files_id
    AND a.version_template_code = b.version_template_code
WHERE CAST(a.processed AS DATE) >='20200201' and CAST(a.processed AS DATE) <'20200301'
   ORDER BY b.unique_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...