0

我正在使用 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 数据。如果有人知道我出了什么问题,我们将不胜感激。

4

3 回答 3

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
于 2013-06-04T20:32:46.357 回答
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                            /*<-------- */

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

于 2013-06-04T20:27:38.283 回答
0

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

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"

于 2013-06-04T20:21:48.703 回答