连接两个表后,结果与原始表不匹配

时间:2010-10-06 21:17:42

标签: sql sql-server tsql

我在内部加入2个表时遇到问题:LOOKUPPERF

LOOKUP

...只有创意名称和“性能”。 table具有广告素材名称及其值。我需要将值设置为LOOKUP(其中两个表都有共同的广告素材名称)。仅供参考:UCID只不过是创意名称

此外,创意名称在两个表中都有重复,因此我需要将它们相加并获得不同的值。下面是我使用的代码,但sum()函数似乎没有工作,因为我看到与原始表数据进行比较时的不同值。

这是我用过的代码

select UCID/*, [creative name]*/,
       sum(perf.[delivered impressions]) as ttl_del,        
       sum(perf.[IMM_SUMMARY])as ttl_WSO,
       sum(perf.[clicks]) as ttl_clicks,
       sum(perf.[IMM_SUMMARY])/sum(perf.[delivered impressions])*100 as IMM_Score    
  from ADHOC_NG_UCID_lookup lookup    
  JOIN FILTERED_CREATIVE_EXEC_TABLE perf ON lookup.[UCID] = perf.[creative name]    
 where perf.[delivered impressions] > 0 
   and perf.[brand] in ('MALIBU') 
   and perf.month in ('APRIL') 
   and perf.[sizes] in('160x600')    
group by UCID/*, lookup.[creative name]*/    
order by UCID/*, [creative name]*/

这是代码,其中i用于交叉检查值(这是原始表)

select [creative name],
        sum([Delivered Impressions]) asttl_del,
        sum([IMM_SUMMARY])asttl_WSO,
        sum([clicks])as ttl_clicks,
        sum([IMM_SUMMARY])/sum([Delivered Impressions])*100 as IMM_Score
from FILTERED_CREATIVE_EXEC_TABLE
where [delivered impressions] > 0 
  and [brand] in('MALIBU')
  and month in('APRIL')
  and [sizes] in('160x600')
group by[creative name]
order by[creative name]

请建议或告诉我为什么sum()函数无法正常工作。

非常感谢您的支持。

2 个答案:

答案 0 :(得分:1)

FILTERED_CREATIVE_EXEC_TABLE中是否存在ADHOC_NG_UCID_lookup中不存在的行?如果是这样,INNER JOIN将从您的第一个查询中排除这些行。要检查这种情况:

select perf.[creative name]
    from FILTERED_CREATIVE_EXEC_TABLE perf
        LEFT JOIN ADHOC_NG_UCID_lookup lookup
            ON perf.[creative name] = lookup.[UCID]
    where perf.[delivered impressions]>0 
        and perf.[brand] in ('MALIBU') 
        and perf.month in ('APRIL') 
        and perf.[sizes] in('160x600')
        and lookup.[UCID] is null

答案 1 :(得分:0)

您的数据可能有重复数据。

运行这些。如果其中任何一个返回的数据意味着那些记录是重复的

select
    UCID, COUNT(*)
from ADHOC_NG_UCID_lookup lookup
group by UCID
having COUNT(*)>1


select
    [creative name], COUNT(*)
from FILTERED_CREATIVE_EXEC_TABLE perf
group by [creative name]
having COUNT(*)>1