我有一个我在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;
我应该在哪里插入/进入声明...或者这是我需要的其他内容。
答案 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;
谢谢大家!