[英]Dynamic rows into columns
嗨,我需要能夠聯接兩個表並將第二個表作為列返回第一個表。 我需要基於最大數量depid(可以是動態的)創建(相關的名字,相關的姓氏和相關的關系)。
先感謝您
表格1
+-------------+-------------+------------+
| employeeid | first name | last name |
+-------------+-------------+------------+
| 1 | bill | johnson |
| 2 | matt | smith |
| 3 | katy | lewis |
+-------------+-------------+------------+
表2
+-------------------------------------------------------------------+
| employeeid |dependent id | First Name | Last Name | Relationship |
+-------------------------------------------------------------------+
| 1 1 mary johnson spouse |
| 1 2 aaron johnson child |
| 2 1 eric smith child |
+-------------------------------------------------------------------+
預期產量
+------------+------------+-----------+----------------------+---------------------+------------------------+----------------------+---------------------+------------------------+
| employeeid | first name | last name | dependent first name | dependent last name | dependent relationship | dependent first name | dependent last name | dependent relationship |
+------------+------------+-----------+----------------------+---------------------+------------------------+----------------------+---------------------+------------------------+
| 1 | bill | johnson | mary | johnson | spouse | aaron | johnson | child |
| 2 | matt | smith | eric | smith | child | | | |
| 3 | katty | lewis | | | | | | |
+------------+------------+-----------+----------------------+---------------------+------------------------+----------------------+---------------------+------------------------+
您可以使用下面的動態SQL和XML路徑示例SQL來執行此操作
- 表格1
創建表#TMP1(EMP_ID INT,名稱Char(10))插入#TMP1值(1,'One')插入#TMP1值(2,'TWO')插入#TMP1值(3,'Three')
-表2
創建表#TMP2(EMP_ID INT,DP_ID INT,FNAME Char(10),Rel Char(10))插入#TMP2值(1,1,'Spouse One','Spouse')插入#TMP2值(1, 2,'Child One','Child')插入#TMP2值(2,1,'Child TWO','Child')
聲明@CNT Int,@Ctr int = 0,@SQL VarChar(MAX)
-獲取最大相關ID
從#TMP2選擇SELECT @CNT = MAX(DP_ID)
-用於驗證 SELECT @CNT
-構建動態SQL以獲取數據集
SET @SQL ='選擇Emp_ID'
而@Ctr <@CNT
開始
Set @Ctr = @Ctr+1
SET @SQL = @SQL + ', ( SELECT FName+'+''''+''''+' FROM #TMP2 Where #TMP1.EMP_ID = #TMP2.EMP_ID and #TMP2.DP_ID = '+Convert(VarChar(2),@Ctr)+' For XML Path ('+''''+''''+') ) as FName'+Convert(VarChar(2),@Ctr)
SET @SQL = @SQL + ', ( SELECT Rel+'+''''+''''+' FROM #TMP2 Where #TMP1.EMP_ID = #TMP2.EMP_ID and #TMP2.DP_ID = '+Convert(VarChar(2),@Ctr)+' FOR XML Path ('+''''+''''+') ) as Rel'+Convert(VarChar(2),@Ctr)
結束
SET @SQL = @ SQL +'FROM#TMP1'
-用於驗證打印動態SQL
選擇@SQL
-執行動態SQL
執行(@SQL)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.