使用SQL Server从SELECT和MAX条件创建新表

时间:2014-09-26 07:27:47

标签: sql sql-server sql-server-2008-r2

我有一个书桌,下面有几列和几行......

Table name- book

稍后我通过将pub_id ....与以下查询分组来过滤2000/01/01和2000/12/01之间的pubdate列

select pub_id,max(pubdate) as max_date 
from book 
group by pub_id 
having MAX(pubdate) between '2000/01/01' and '2000/12/01'

结果如下:

enter image description here

现在我想将过滤后的数据转移到新的book1中,我尝试了以下查询,但它以错误结束!!!!

select * into book1 
from 
(
    select pub_id,max(pubdate) as max_date 
    from book 
    group by pub_id 
    having MAX(pubdate) between '2000/01/01' and '2000/12/01'
)

我尝试了以下内容并且正在运行

insert into existing_table     
(
    select pub_id,max(pubdate) as max_date 
    from book 
    group by pub_id 
    having MAX(pubdate) between '2000/01/01' and '2000/12/01'
)

但我想将过滤后的数据动态推送到新表中? 所以请在插入查询中纠正我的错误...... 在此先感谢!!!!!

2 个答案:

答案 0 :(得分:1)

提供别名

<强>查询

select * into book1 
from 
(
    select pub_id,max(pubdate) as max_date 
    from book 
    group by pub_id 
    having MAX(pubdate) between '2000/01/01' and '2000/12/01'
) x

答案 1 :(得分:1)

别名可用于替换列名或表名。

在您的情况下,需要表别名,因为sql引擎处理基于集合的逻辑。如果你没有为你定义的select语句添加一个表别名,那么即使你的select语句有效,sql引擎也不会知道它应该引用哪个集合。

简单地设置别名就会让sql引擎识别哪个表(就像一个唯一的ID)来引用。

例如,简单语句&#34; select * from TableName&#34 ;, TableName的工作方式类似于表别名或要引用的标识。

(1)如果你只是把#34; Select * from(Select * from TableName)&#34;
(2)如果你把&#34; Select * from(Select * from TableName)x&#34;。

希望这可以解释你的怀疑。