使用表变量计算聚合

时间:2014-08-05 16:30:21

标签: sql-server sql-server-2008

我正在将一些存储过程从SQL Server 2000更新到2008.在进行了必要的语法更改后,一切都运行良好,除了一个项目在2000年按需要工作,但在2008年没有。这里' sa大大简化了我的问题的可重复陈述。

我有一张包含以下数据的表格:

Table_1

我使用以下存储过程来提取数据并计算聚合计数:

CREATE PROCEDURE proc1 

AS
DECLARE @tablevar AS TABLE (
   userid NCHAR(4),
   foo NCHAR(2),
   bar NCHAR(2),
   total INT,
   PRIMARY KEY (userid, foo, bar)
)

INSERT INTO @tablevar (userid, foo, bar)
SELECT DISTINCT t1.userid, t1.foo, t1.bar
FROM Table_1 t1
GROUP BY UserID, Foo, Bar

UPDATE @tablevar
SET total =
    (SELECT COUNT(logid) 
     FROM Table_1 t1
     WHERE t1.UserID = UserID and
           t1.Foo = Foo and 
           t1.Bar = Bar)

SELECT * FROM @tablevar
RETURN
GO

这会产生以下结果:

Result Set

使用SQL Server 2000时,total列中的条目为[2,1,1,1],这是预期的结果。我假设我在这里错过了一些非常明显的东西,但我似乎无法将手指放在上面。

1 个答案:

答案 0 :(得分:4)

由于您必须使用表变量,请按以下方式填写:

INSERT INTO @tablevar (userid, foo, bar, total)
SELECT userid, foo, bar, count(1) as total
FROM Table_1
GROUP BY userid, foo, bar