从select语句创建新表

时间:2017-04-17 14:09:18

标签: sql sql-server

我有一个我在Access中使用的选择查询来获取我想要实现的某些特定数据。现在我转到SQL Server(创建ssrs报告),所以我想从Access获取此查询并在SQL Server中使用它,并在每次执行此查询时创建一个新表。

这是我在Access db中使用的当前查询:

select taxid, address1, count(address1)
from dbo.tblaccounts
group by taxid, address1
order by address1 asc, count(address1) desc;

我应该在哪里插入/进入声明...或者这是我需要的其他内容。

4 个答案:

答案 0 :(得分:2)

您尝试执行的操作称为Select Into或Create Table As Select(CTAS)。 MSDN对何时使用CTAS与Select Into(https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-develop-ctas)进行了很好的讨论。虽然本文讨论了数据仓库,但在这种情况下讨论是有效的,IMO。

由于我从另一个表创建的大多数表都涉及复杂的连接和联合,我倾向于使用CTAS。也就是说,Select Into方法可能适用于您的场景。

您将使用的代码是:

CREATE TABLE AccountSummaryOrWhatever AS
select taxid, address1, count(address1)
from dbo.tblaccounts
group by taxid, address1;

或者

select taxid, address1, count(address1)
INTO AccountSummaryOrWhatever 
from dbo.tblaccounts
group by taxid, address1;

答案 1 :(得分:1)

如果您需要基于该查询创建新表,有多种方法,最简单的方法是使用Select Into From,查询将是:

select taxid, address1, count(address1)
INTO TABLEA
from dbo.tblaccounts
group by taxid, address1
order by address1 asc, count(address1) desc;

注意:此方法仅传输数据和约束等。不会得到保留。 但是如果每次运行查询时都需要获取该表,则需要DROP并再次创建表,否则会抛出对象错误。此外,可能有很多方法。简单的方法是:

IF EXISTS(select 1 from sys.objects where name = 'TABLEA' and type = 'U') --or you could use IF EXISTS(OBJECTID('TABLEA','U'))
BEGIN 
DROP TABLE TABLEA
END
--then paste your query after
    select taxid, address1, count(address1)
    INTO TABLEA
    from dbo.tblaccounts
    group by taxid, address1
    order by address1 asc, count(address1) desc;

答案 2 :(得分:1)

我有一种预感,你真正想要做的就是创建一个视图。 MS Access中的查询与视图类似(或者在ADD / DELETE / UPDATE查询的情况下,它们就像存储过程一样)。就像MS Access查询一样,其他代码可以像表一样引用视图,就像访问查询一样,这就像一个“始终是最新的”表。

create view ViewName
as
select
    taxid,
    address1,
    count(address1) as address_count
from
    dbo.tblaccounts
group by
    taxid,
    address1

你会注意到我已经离开了ORDER BY条款。这里不允许使用它们,您可以在此视图中选择的任何代码中指定顺序。

答案 3 :(得分:0)

Create Procedure proc_new_table 
As
SET NOCOUNT ON;

IF OBJECT_ID('new_table','U') IS NOT NULL 
DROP TABLE new_table;
select distinct cust_name, taxid
INTO new_table
from tblaccounts;

谢谢大家!