2016-06-08 75 views
0

我有一个表Id | DocId | Page | WordCount使用INSERT INTO与WHERE

我想为N个页面插入字数。也就是说,如果N = 3,那么我想添加的所有字计数为1,2和3的网页,然后将它们插入到一个新表Id | DocId | WordCount

我努力做到以下几点:

INSERT INTO [NewDocTable] (DocId, WordCount) 
    SELECT [W].DocId AS DocId, SUM ([W].WordCount) AS WordCount 
    FROM [OldDocTable] AS [W] 
    WHERE [W].Page <= @N 

莫非有人帮忙?

我有以下错误:列'OldDocTable.DocId'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

+1

好的,但究竟是什么问题? – mic4ael

+1

而这个错误信息,或者尤其是它的最后一部分,并没有给你一个*提示*以解决它的方法? –

+0

错误消息为您提供了一个非常好的指示,说明发生了什么问题。该select语句正在执行聚合(SUM),因此您需要添加一个group by语句以便工作。在末尾添加GROUP BY [W] .DocId应该解决问题 –

回答

3

试图添加一个组?您正在使用一个聚合功能SUM()在这种情况下,实际上,将要求您告诉你要总结起来反对DocId

INSERT INTO [NewDocTable] (DocId, WordCount) 
    SELECT [W].DocId AS DocId, SUM ([W].WordCount) AS WordCount 
    FROM [OldDocTable] AS [W] 
    WHERE [W].Page <= @N 
    GROUP BY [W].DocId 
+0

仍然是同样的错误:(我缺少一些括号,标签或其他东西吗? –

+0

SELECT语句是否自己运行(不带插入部分?) – hashbrown

+0

对不起,现在可以使用了。谢谢!! –

1

的问题是从你的错误信息很清楚的数据库。使用下面的查询:

INSERT INTO [NewDocTable] (DocId, WordCount) 
    SELECT [W].DocId AS DocId, SUM ([W].WordCount) AS WordCount 
    FROM [OldDocTable] AS [W] 
    WHERE [W].Page <= @N 
    GROUP BY [W].DocId 

检查this.

+1

由于[W] .WordCount是一个聚集的一部分,所以你不会想要这个在组中。 –

+0

是的,谢谢你指出。 – MusicLovingIndianGirl

1

尝试通过该声明暗示添加组;

INSERT INTO [NewDocTable] (DocId, WordCount) 
SELECT [W].DocId AS DocId, SUM ([W].WordCount) AS WordCount 
FROM [OldDocTable] AS [W] 
WHERE [W].Page <= @N 
GROUP BY [W].DocId 

该问题与INSERT INTO不同,它与您的SELECT语句一起使用。为了检查它是否在做你期望的事情,首先运行select以确保它正常工作,这是一种很好的做法。