首页 > 解决方案 > 使用映射表数据值动态选择数据

问题描述

我有一个映射表,我有 DatacolumnName。这是映射表数据

ID  CustomObjectID  ObjectFieldName DataColumnName  CustomerID  UserID  IsActive    CustomObjectName
1047    2074        CompanyName       Column_1          18        17       1         CompanyObject
1049    2074          Email           Column_3          18        17       1        CompanyObject
1050    2074       CompanyPhone       Column_4          18        17       1        CompanyObject
1051    2074    CompanyBranch          Column_5         18         17       1        CompanyObject
1052    2074       BranchCode           Column_6        18         17       1         CompanyObject
1053    2074        City               Column_7         18         17       1         CompanyObject
1054    2074    PostalCode             Column_8         18         17       1         CompanyObject
1055    2074    Country                Column_9         18         17       1          CompanyObject

我的数据表记录是另一个表,表名是 CustomData

Column_1    Column_3    Column_4    Column_5    Column_6    Column_7    Column_8    Column_9
Software    umar@gmail  03115171558  Miami       123         LA         786345test    USA1

但是我需要使用映射表值(ObjectFieldName)在标题中显示数据,例如

CompanyName Email       CompanyPhone  CompanyBranch BranchCode   City      PostalCode   Country
Software    umar@gmail  03115171558       Miami      123         LA         786345test    USA1

我需要使用这些标题显示数据。每次表映射列都更改了,所以我需要动态完成。如果有人请帮助我。

标签: sql

解决方案


我已经解决了这个问题,如果有人遇到同样的问题,我将分享我的 sql 脚本,可以从我分享的脚本中得到一个想法。

declare @count int
declare @temp table (id int not null primary key identity(1,1) ,customdataid int, columnname varchar(max), fieldname varchar(max))
insert into @temp
select CustomObjectID, DataColumnName , ObjectFieldName from CustomObjectMappingTable
set @count = @@ROWCOUNT
declare @Coulmnname varchar(max) , @fieldname nvarchar(max)
while @count > 0
BEGIN
    SELECT  @Coulmnname = columnname , @fieldname = fieldname 
        FROM @temp
        WHERE id=@count
        declare @mergeColumnname varchar(max) = @Coulmnname + ' AS ' + @fieldname
        declare @coltable table (ColumnNames Nvarchar(max))
        insert into @coltable values ( '' + @mergeColumnname +'')
        
    SET @count = @count - 1; -- Countdown
END
--select * from  @coltable
 DECLARE @cols NVARCHAR(MAX), @query1 NVARCHAR(MAX) , @DataValues NVARCHAR(max);
SET @cols = STUFF( (SELECT DISTINCT ','+ColumnNames FROM @coltable c  FOR XML PATH(''), TYPE ).value('.', 'nvarchar(max)'), 1, 1, '');
Declare @UpdateColumnQuery nvarchar(max)
SET @UpdateColumnQuery = 'select CustomobjectSchemaID , DataID , ' + @cols + ' from customdata where CustomObjectSchemaID = ' + CAST(@CustomObjectSchemaId As nvarchar(20)) 
EXEC( @UpdateColumnQuery )

推荐阅读