我正在使用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数据。如果有人知道我的错误,我们将不胜感激。
答案 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