2014-01-31 58 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 ...) 

我希望我能涵蓋你的問題......問候。

相關問題