2014-01-31 36 views
0

我有一个项目具有asp页面的动态字段详细信息。执行该页面时,将查询数据库中的动态字段列表,然后在asp页面上运行时创建所有控件。现在,所有这些动态字段在另一个(或者说多个)表中都有对应的数据。T-SQL中的多项选择并将一个单元格转置到另一个单元格

在动态控制详细表中的数据是这样的:

FieldID | FieldName   | MappingTableName | MappingColumnName 
------------------------------------------------------------------------- 
92  | txtPrsnFirstName | Table1   | FirstName 
93  | txtPrsnLastName | Table1   | LastName 
94  | ddlPrsnGender  | Table2   | Gender 
95  | txtCompany  | Table2   | Company 
96  | txtDesignation | Table1   | Designation 

相应数据表中的数据如下所示:

表1

PersonID | FirstName | LastName | Designation 
----------------------------------------- 
1  | Person1  | SomeName | Manager 
2  | Person2  | MoreName | Executive 

表2

PersonID | Gender  | Company  
-------------------------------------- 
1  | Male  | ABC Cons 
2  | Female  | XYZ PVT.LTD 

现在,我所做的是,创建一个存储过程,一次返回所有三个表数据,我会在DataSet中获取它们中的每一个,然后我将首先遍历FieldTable数据,然后获取从Table1Table2

相应的数据我需要编写获取的方式,从Table1Table2数据会以多行的形式得到调换了数据的查询(一次获取只有一个记录)像这个。

FieldID | FieldName   | MappingTableName | MappingColumnName | Data 
--------------------------------------------------------------------------------------- 
92  | txtPrsnFirstName | Table1   | FirstName   | Person1 
93  | txtPrsnLastName | Table1   | LastName    | SomeName 
94  | ddlPrsnGender  | Table2   | Gender    | Male 
95  | txtCompany  | Table2   | Company    | ABC Cons 
96  | txtDesignation | Table1   | Designation   | Manager 
+0

如何找出哪个值属于相应表中的哪个字段名?你怎么知道名字的数据是Person1而不是Person2 – DhruvJoshi

+0

请参阅我已经提到过会有一个选择(你可以使用Join的逻辑)。意味着只有一个来自Table1和Table2的记录将被立即提取。 (你的)前一个问题已经在(我的)问题中回答了;字段表具有'MappingTableName'和'MappingColumnName',可用于从数据表中选择相应的数据。 – Cyberpks

+0

但是,您如何知道该映射表和映射列中的哪条记录,您知道,哪一行? – DhruvJoshi

回答

0

我想补充隐藏列(I将其称为PersonMap)在现场表指示FieldID和是PersonID之间的映射(这意味着:场与ID XY示出了从人Ž数据)。 现在创建一个类的函数(我的TSQL是有点生疏 - 因此伪SQL):

create function returnPersonData(in tablename varchar, in columnname varchar, in personID varchar) RETURNS VARCHAR 
BEGIN 
declare res varchar; 
set res = EXEC('SELECT %columnname% FROM %tablename% WHERE PersonID = %personID%'); 
return res; 
END 

现在使用创建的功能,为您的Data_column。 FROM语句是你的FieldTable + PersonMap列:

SELECT FieldID, FieldName, MappingTableName, MappingColumnName, (returnPersonData(MappingTableName, MappingColumnName, PersonMap) AS Data) 
FROM (SELECT FieldID, FieldName, MappingTableName, MappingColumnName, (SELECT PersonID from somewhere) AS PersonMap FROM FieldTable ...) 

我希望我能涵盖你的问题......问候。

相关问题