【问题标题】:Split multiple column and store into temp table拆分多列并存储到临时表中
【发布时间】:2019-07-20 21:00:12
【问题描述】:

我有样本数据:

表:tblsampledata

create table tblsampledata
(
    column1 varchar(50),
    column2 varchar(50)
);

insert into tblsampledata values('Bob Frapples','Gail Forcewind');
insert into tblsampledata values('Paul Molive','Mario Speedwagon');

我有表名的列映射表:

表:tblmapping

create table tblmapping
(
    tblname varchar(100),
    columnmap varchar(max)
);

insert into tblmapping values('tblsampledata','[column1]|[column2]');   

注意:我想将tblname列中表名tblmapping中存在的列数据拆分并存储到临时表中。

预期结果:#TempTable

column1     column2
---------------------
Bob         Gail
Frapples    Forcewind
Paul        Mario
Molive      Speedwagon

【问题讨论】:

  • 映射 = [column1] 的结果如何?

标签: sql-server tsql sql-server-2008-r2


【解决方案1】:

您需要使用动态查询来实现这一点。

你可以尝试如下。

select @xml = Cast(( '<X>' + Replace(columnmap, '|', '</X><X>') + '</X>' ) AS XML) 
from tblmapping where tblname =@tablename


DECLARE @query AS NVARCHAR(max) = 'select ' +  Stuff((SELECT DISTINCT ', ' + value
            FROM   (
            SELECT n.value('.', 'varchar(100)') AS value 
            FROM   @xml.nodes('X') AS T(n)
        )t
            FOR xml path(''), type).value('.', 'NVARCHAR(MAX)'), 1, 1, '') 
                  + ' from ' + @tablename; 
exec sp_executesql @query  

Online Demo

要拆分第 1 列和第 2 列,您可以使用如下查询。

SELECT CASE 
         WHEN n = 1 THEN LEFT(column1, Charindex(' ', column1) - 1) 
         WHEN n = 2 THEN RIGHT(column1, Charindex(' ', Reverse(column1)) - 1) 
       END AS column1, 
       CASE 
         WHEN n = 1 THEN LEFT(column2, Charindex(' ', column2) - 1) 
         WHEN n = 2 THEN RIGHT(column2, Charindex(' ', Reverse(column2)) - 1) 
       END AS column2 
FROM   tblsampledata t1 
       CROSS JOIN ( VALUES(1),(2) )t(n) 

Full Demo 使用动态查询

【讨论】:

  • 在结果中获得相同的值。您能否检查问题中提到的预期结果?
  • 如果我们在任何一列中超过 2 个单词,我需要进行哪些更改?例如,我有类似 column1 = Will Jay Smith 的条目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-20
相关资源
最近更新 更多