带有count的SQL更新只获得空值

时间:2013-06-04 20:15:15

标签: sql sql-server sql-server-2008

我正在使用SQL Server 2008 R2和SSRS 2008来生成报告。我正在尝试更新表以获取另一个表的结果计数。

UPDATE r
SET r.Race = d2.Race,
    r.RaceNum = d2.count
FROM @results r
INNER JOIN
  (SELECT d.Race,
          COUNT(d.race) AS 'count'
   FROM #Demographic d
   GROUP BY d.Race)d2 ON r.Race = d2.Race

插入工作完美,但我在结果表中多次插入以创建人口统计报告。这会在结果表中创建很多Null数据。如果有人知道我的错误,我们将不胜感激。

3 个答案:

答案 0 :(得分:0)

不确定,但首先猜测的是,计数是一个保留字......将其更改为其他内容,例如......

update r 
set r.Race = d2.Race, r.RaceNum = d2.cnt 
from @results r
inner join
(select d.Race, COUNT(d.race) as 'cnt' from #Demographic d group by d.Race)d2
on r.Race = d2.Race

或者尝试将列标识符分隔为[count],或者如果您在"count"上引用了标识符

答案 1 :(得分:0)

您的查询是:

update r 
    set r.Race = d2.Race,                              /*<---------*/
        r.RaceNum = d2.count 
    from @results r inner join
         (select d.Race, COUNT(d.race) as 'count'
          from #Demographic d
          group by d.Race
         ) d2
         on r.Race = d2.Race                            /*<-------- */

两条标记线突出。您正在使用=加入值,然后设置一个等于另一个。这可能不是问题,但它是可疑的。如果你加入它们,你为什么要将它们设置为相同?我怀疑是连接失败了,因为没有任何东西可以匹配。

答案 2 :(得分:0)

您不需要更新竞赛列,因为这是您的联接的相等部分。

如上所述,任何不在#demographic中的比赛都会将其racenum设置为null。如果您想要0,请尝试:

UDPATE 
    r 
SET 
    r.RaceNum = ISNULL(d2.ct, 0)
FROM @results r
LEFT JOIN
    (
        SELECT 
            d.Race
            , COUNT(d.race) as ct 
        FROM 
            #Demographic d 
        GROUP BY 
            d.Race
    ) d2
ON 
    r.Race = d2.Race