2013-06-04 32 views
0

我正在使用SQL Server 2008 R2和SSRS 2008生成報告。我正在嘗試更新表以從另一個表中獲得結果的計數。帶有計數的SQL更新只能得到空值

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 

插入效果很好,但我在結果表中插入了幾次來創建人口統計報告。這會在結果表中創建大量的空數據。如果任何人有我的錯誤的想法幫助將不勝感激。

+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"

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       /*<-------- */ 

兩個標線脫穎而出。你正在使用=加入數值,然後你設置一個等於另一個。這可能不是問題,但它是可疑的。如果你加入他們,你爲什麼設定他們平等?我的懷疑是加入失敗,因爲沒有任何匹配。

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