[英]Dynamic rows into columns
Hi I need to be able to join two tables and return the second table as columns to the first table. 嗨,我需要能够联接两个表并将第二个表作为列返回第一个表。 I need to create (dependent first name, dependent last name, and dependent relationship) based on the max number depid (which can be dynamic).
我需要基于最大数量depid(可以是动态的)创建(相关的名字,相关的姓氏和相关的关系)。
thank you in advance 先感谢您
table 1 表格1
+-------------+-------------+------------+
| employeeid | first name | last name |
+-------------+-------------+------------+
| 1 | bill | johnson |
| 2 | matt | smith |
| 3 | katy | lewis |
+-------------+-------------+------------+
table 2 表2
+-------------------------------------------------------------------+
| employeeid |dependent id | First Name | Last Name | Relationship |
+-------------------------------------------------------------------+
| 1 1 mary johnson spouse |
| 1 2 aaron johnson child |
| 2 1 eric smith child |
+-------------------------------------------------------------------+
expected output 预期产量
+------------+------------+-----------+----------------------+---------------------+------------------------+----------------------+---------------------+------------------------+
| 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 | | | | | | |
+------------+------------+-----------+----------------------+---------------------+------------------------+----------------------+---------------------+------------------------+
You Can do This with dynamic SQL & XML Path example SQL below 您可以使用下面的动态SQL和XML路径示例SQL来执行此操作
--Table 1 - 表格1
CREATE TABLE #TMP1 (EMP_ID INT, NAME Char(10) ) INSERT INTO #TMP1 VALUES (1,'One') INSERT INTO #TMP1 VALUES (2,'TWO') INSERT INTO #TMP1 VALUES (3,'Three') 创建表#TMP1(EMP_ID INT,名称Char(10))插入#TMP1值(1,'One')插入#TMP1值(2,'TWO')插入#TMP1值(3,'Three')
--Table 2 -表2
CREATE TABLE #TMP2 (EMP_ID INT, DP_ID INT,FNAME Char(10),Rel Char(10) ) INSERT INTO #TMP2 VALUES (1,1,'Spouse One','Spouse') INSERT INTO #TMP2 VALUES (1,2,'Child One','Child') INSERT INTO #TMP2 VALUES (2,1,'Child TWO','Child') 创建表#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')
Declare @CNT Int , @Ctr int = 0 , @SQL VarChar(MAX) 声明@CNT Int,@Ctr int = 0,@SQL VarChar(MAX)
--Get Max Dependent ID -获取最大相关ID
SELECT @CNT = MAX(DP_ID) from #TMP2 从#TMP2选择SELECT @CNT = MAX(DP_ID)
--For Verification SELECT @CNT -用于验证 SELECT @CNT
--Build Dynamic SQL to get the dataset -构建动态SQL以获取数据集
SET @SQL = 'SELECT Emp_ID ' SET @SQL ='选择Emp_ID'
While @Ctr < @CNT 而@Ctr <@CNT
Begin 开始
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)
End 结束
SET @SQL = @SQL+' FROM #TMP1 ' SET @SQL = @ SQL +'FROM#TMP1'
--For Verification Print the Dynamic SQL -用于验证打印动态SQL
Select @SQL 选择@SQL
--Execute the dynamic SQL -执行动态SQL
EXEC(@SQL) 执行(@SQL)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.