代码之家  ›  专栏  ›  技术社区  ›  user3711357

如何在SQL Server中获取要与列映射的行值

  •  -2
  • user3711357  · 技术社区  · 8 年前

    表格: fieldTable (只有一列 ColumnFileName )

    @fieldTable (ColumnFileName varchar(10))
    
    ColumnFileName: (Values are as below).    
            f1
            f2
            f3
            f4,
            f5
    

    表格: ValueTable (以下9列)

    @valuetable(id INT, f1 VARCHAR(100), f2 VARCHAR(100), 
                f3 VARCHAR(100), f4 VARCHAR(100), f5 VARCHAR(100),
                f6 VARCHAR(100), f7 VARCHAR(100), comments VARCHAR(100))
    
     Id   f1     f2   f3,      f4         f5      f6,     f7       comments
     ----------------------------------------------------------------------
      1   Name   Id   Salary   Interest   Offer   value   Salary   ''
    

    如何得到如下结果(将表1的行值映射到表2的列值):

    f1,Name,
    f2,Id
    f3,Salary
    f4,Interest
    f5,Offer,
    f6,value,
    f7,Salary,
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Holmes IV    8 年前

    我想这会让你得到你所需要的。我首先插入了一些合适的插页,这样后续的任何人都至少可以拥有这些插页。然后进行基本的取消分割和匹配。

    DECLARE @FIELDTABLE TABLE (COLUMNFILENAME VARCHAR(10))
    INSERT INTO @FIELDTABLE (COLUMNFILENAME)
    VALUES ( 'f1')
            ,('f2')
            ,('f3')
            ,('f4')
            ,('f5')
            ,('f6')
            ,('f7')
    
    DECLARE @VALUETABLE TABLE (Id INT,f1 varchar(100),f2 varchar(100),f3 varchar(100),f4 varchar(100),f5 varchar(100),f6 varchar(100),f7 varchar(100),comments varchar(100))
    INSERT INTO @VALUETABLE (Id, f1, f2, f3, f4,f5,f6,f7,comments)
            Values (1, 'Name','Id','Salary','Interest','Offer','value','Salary','')
    
    SELECT F.COLUMNFILENAME
            ,v.Columns
    
    FROM @FIELDTABLE f
    inner join
    (
    SELECT Columns, Columns2
    FROM (
        SELECT *
            from @VALUETABLE
        ) cp
    UNPIVOT
    (
        Columns FOR Columns2 in (F1,F2,F3, f4,f5,f6,f7)
    ) as UP
    ) v
    on f.COLUMNFILENAME = v.Columns2