在MSSQL中将1个表转换为2个表

时间:2019-02-11 01:06:23

标签: sql sql-server

我的工作表中包含这样的数据:

  • 供应商名称描述FuelType
  • Avery Wood Wood
  • Beta LP Gas LP Gas
  • 机油,煤油,液化石油气,机油
  • 机油,煤油,液化石油气,煤油
  • 机油,煤油,液化石油气LP气体

但是现在,我需要像这样转换它们

这个叫vendor的桌子

  • 供应商名称:
  • 非常
  • 测试版
  • 聪明

此表称为供应商fueltype

  • VendorName燃料类型
  • Avery Wood
  • Beta液化石油气
  • 聪明油
  • 聪明的煤油
  • 聪明液化石油气

我觉得我可以直接使用insert into的选择来将我需要的工作表移动到燃料类型表,但是以某种方式我想不出在第二个表中进行所有记录的好方法。我在想如果表中有重复的名称,请选择第一个,或类似的名称。

任何人都可以提些建议吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

根据您提供给我们的内容,以下方法应该起作用:

CREATE TABLE #Original (
     VendorName     varchar(100)
    ,[Description]  varchar(100)
    ,FuelType       varchar(100)
    )

CREATE TABLE Vendor (
    VendorName  varchar(100)
    )

CREATE TABLE VendorFuelType(
     VendorName varchar(100)
    ,FuelType   varchar(100)
    )

INSERT INTO #Original (VendorName, [Description], FuelType)
    VALUES   ('Avery', 'Wood', 'Wood')
            ,('Beta', 'LP Gas', 'LP Gas')
            ,('Clever', 'Oil,Kerosene,LP Gas', 'Oil')
            ,('Clever', 'Oil,Kerosene,LP Gas', 'Kerosene')
            ,('Clever', 'Oil,Kerosene,LP Gas', 'lP Gas')

INSERT INTO Vendor(VendorName)
    SELECT  DISTINCT VendorName 
    FROM    #Original


INSERT INTO VendorFuelType(VendorName, FuelType)
    SELECT  VendorName, FuelType
    FROM    #Original

尽管该示例尚未设置主键/外键,但假定它们将存在,因此是首先填充Vendor表,然后是VendorFuelType表的原因。

如注释中所述,Vendor表只是VendorName上的SELECT DISTINCT

答案 1 :(得分:0)

对于MySQL,您可以简单地使用以下查询插入到另一个表中:

INSERT INTO Vendor(VendorName) SELECT VendorName FROM OriginalTable;

INSERT INTO VendorFuelType(VendorName, FuelType) SELECT VendorName, FuelType 
FROM OriginalTable;

这也有助于获取重复的条目。另一种方法是使用DB Cursor,它也会给您相同的结果。 这是a link对于游标。
对于SQL Server,您可以使用上面的查询,但对于Cursor,则需要进行一些更改