从多个表中的列创建新表

时间:2014-11-14 19:28:43

标签: sql sql-server

在完整的披露中,本周我使用SQL进入了一个项目,不幸的是,在非常基本的查询之外,使用它的经验很少。我将开始研究,但在短期内真的可以在这里使用一些帮助。

在此示例中,表名为Person_PRPerson_CME

两个表

  • 包含与同一个人有关的信息,并包含相同的人员标识符(record_num和person_num)。
  • 按record_num和person_num排序,因此它们完全对齐。

表:

Person_PR

record_num, person_num, pr_variable1, pr_variable2

Person_CME

record_num, person_num, cme_variable1, cme_varable2

我希望新表Person_new包含record_num, person_num, cme_variable1, cme_varable2, pr_variable1 and pr_variable2

  • cme_变量来自Person_CME表和
  • pr_变量将来自Person_PR表。

新表Person_new

record_num, person_num, cme_variable1, cme_varable2, pr_variable1, pr_variable2

我尝试使用insert into和create table作为select方法,但是无法正常工作。我希望有人能让我开始朝着正确的方向前进。提前感谢您花时间阅读本文以及您可能提供的任何帮助。

3 个答案:

答案 0 :(得分:1)

在sql server中创建新表的语法是

SELECT p.record_num
     , p.person_num
     , c.cme_variable1
     , c.cme_variable2
     , p.pr_variable1
     , p.pr_variable2
INTO new_table
FROM Person_PR p
INNER JOIN Person_CME c 
   ON  p.person_num = c.person_num
   AND p.record_num = b.record_num

但是,使用视图显示所需数据可能更有意义。

答案 1 :(得分:0)

您需要使用存储过程,而不是新表:

CREATE PROCEDURE [dbo].GetPersonData

AS
BEGIN

    SET NOCOUNT ON;

    SELECT  cme.record_num ,
            cme.person_num ,
            cme.cme_variable1 ,
            cme.cme_variable2 ,
            pr.prvariable1 ,
            pr.prvariable2
    FROM    Person_CME cme
            INNER JOIN Person_PR pr ON cme.record_num = pr.record_num
                                       AND cme.person_num = pr.person_num

END

然后,您可以使用存储过程作为Access窗体的记录源。无需创建新表,需要定期刷新并存储重复数据。如果适用,您也可以查看。

答案 2 :(得分:0)

在SSMS,对象资源管理器中,您可以右键单击表,脚本表为,创建到,新查询编辑器窗口。创建第3个查询窗口,复制并粘贴要从每个表中获取的字段,然后执行脚本以创建新表。

您也可以使用SELECT语句:

SELECT record_num, person_num, cme_variable1, cme_varable2, pr_variable1, and pr_variable2
INTO Person_new
FROM Person_PR
JOIN Person_CME ON 1=2

从那里你可以通过对象资源管理器进行编辑。

如果要包含两个表中的DATA,请将其设为视图,而不是尝试维护单独的表:

CREATE VIEW Person_new AS
SELECT PR.record_num, person_num, cme_variable1, cme_varable2, pr_variable1, and pr_variable2
FROM Person_PR AS PR
JOIN Person_CME AS CME ON PR.record_num = CME.record_num AND PR.person_num = CME.person_num

通过在任何select语句中包含ORDER BY子句来强制执行顺序,表不是“有序”