簡體   English   中英

動態行成列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM