Попытка получить уникальные значения, используя оператор with - PullRequest
0 голосов
/ 26 февраля 2020

Я создал прямую таблицу, но хотел включить оператор с, чтобы получить уникальные «импульсы» из него. Это ярлык в моей базе данных. Я попробовал следующее, но получил неизвестную ошибку.

Ошибка:

09: 58: 45 Начинается выполнение запроса в строке 1 Msg 8115, уровень 16, состояние 2, строка 3 Arithmeti c Ошибка переполнения при преобразовании выражения в тип данных int. Предупреждение: нулевое значение устраняется с помощью агрегата или другой операции SET. Общее время выполнения: 00: 00: 22.736

with temp_table as 
    (
    SELECT distinct(b.creative_id)
    ,b.creative
    ,channel
    ,publisher
    ,strategy
    ,pulse
    ,sum(a.impressions) as cpi_imps
    ,sum(a.clicks) as cpi_clicks
    ,avg(a.cpi) as Avg_CPI
    ,max(a.cpi) as max_cpi
    FROM [digital_media].[dbo].[tableau_out_combined] as b
    LEFT JOIN  digital_media.dbo.in_encore_creative_v3 as a 
    on b.creative_id = a.creative_id
    where channel = 'Performance Display'
    and date between '2019.12.01' and '2019.12.31'
    and (b.creative_id is not null and b.creative_id <> 0)
    group by channel, publisher,strategy, b.version, b.creative_id, b.creative, pulse
    )
select distinct(pulse)
from temp_table

Я уверен, что использую его неправильно. Любое руководство с благодарностью.

1 Ответ

0 голосов
/ 26 февраля 2020

Я изначально добавил это в комментарий, но я уверен, что это требуемый ответ.

Либо:

Вы применяете свой sum к нечисловому c столбец, который вызывает проблемы, которые могут быть решены только путем очистки данных.

Ваш столбец b.creative_id не является типом данных int и нарушает неявное преобразование, созданное вашим and (b.creative_id is not null and b.creative_id <> 0) сравнением с int значение 0. Это можно исправить, используя вместо этого '0'.

Или общее значение вашего sum больше, чем может обработать тип данных int (2,147,483,647). Чтобы исправить это, преобразуйте значения int в значения bigint перед передачей их в sum, чтобы sum возвращал тип данных bigint, который может содержать результирующее значение:

,sum(cast(a.impressions as bigint)) as cpi_imps
,sum(cast(a.clicks as bigint)) as cpi_clicks
...