2016-02-29 39 views
0

我需要改变表格的物理结构。改变表格合并列T-SQL

将2列合并为整个表格的单个列。

E.g

ID Code Extension 
1 012 8067978 

应该

ID Num 
1 0128067978 
+2

您需要创建新列,更新其值,然后删除旧列,如果您不再需要它们。 – artm

+0

这将是很好的知道你为什么“需要”改变他们的表格结构的方式,你建议。像这样的连接可能违背规范化的原则,特别是如果你以后需要不管原因是不是连续的。考虑上面的例子,可能在0128的[code]列中有一个值,在067978的[extension]列中有一个值。最终可能会得到不同起点的相同结果,已经将它们连接起来,可能没有回头路可走。可能有其他选项对您开放,例如计算列。 – DatumPoint

回答

2

你可以只在select语句添加在一起:

SELECT Column1 + Column2 AS 'CombinedColumn' FROM TABLE 

永久性地一起加入他们:

第1步:Add Column

ALTER TABLE YOUR_TABLE 
    ADD COLUMN Combined_Column_Name VARCHAR(15) NULL 

第2步:结合领域

UPDATE YOUR_TABLE 
    SET Combined_Column_Name = Column1 + Column2 

如果你想保持完好表你可以只通过一个view访问表的信息。

CREATE VIEW View_To_Access_Table 
AS 
    SELECT t.Column1, t.Column2, etc.... 
      t.CombinedColumn1 + t.CombinedColumn2 AS 'CombinedColumnName' 
    FROM YOUR_TABLE t 

您还可以创建一个computed column如果你不想创建一个视图:

ALTER TABLE YOUR_TABLE 
    ADD COLUMN CombinedColumn AS Column1 + Column2 
1
ALTER TABLE DataTable ADD FullNumber VARCHAR(15) NULL 
GO 

UPDATE DataTable SET FullNumber = ISNULL(Column1, '') + ISNULL(Column2, '') 
GO 

-- you may have FullNumber as NOT NULL, if the number is mandatory and not null for every record 
ALTER TABLE DataTable ALTER COLUMN FullNumber VARCHAR(15) NOT NULL 

第一步是创建列和第二使字符串的连接,同时服用保留空值,如果有的话。

在删除旧列之前,应考虑它们的用法。如果您需要某些报告中的任何数字,则拆分字符串比存储值实际上更难。但是,这也意味着冗余(更多空间,可能的一致性问题)。

0

可以列第一组合成一列,然后执行以下步骤: -

update table Column1 = ISNULL(Column1, '') + ISNULL(Column2, '') 

重命名列,并从表中删除额外的列。 确保该列的数据类型为varchar。