Sql server 在SQL SERVER中将行转换为具有不同行数的列

Sql server 在SQL SERVER中将行转换为具有不同行数的列,sql-server,pivot,Sql Server,Pivot,我有一个场景,我需要将行转换为列,但我们没有每个客户的固定行数,这取决于他/她在表中输入值的字段数,这些行将在表中创建。假设我们在表单上有15个字段,他/她只填写了13行,那么只会为该客户创建13行值,如果某个客户填写了所有15个字段,那么该客户的表中将有15行 请您帮助我如何在这个可变行列表上编写查询,以及如何编写sql查询,以便使用单个查询将所有行转换为列 Sample Data: Id EntityId Key Value 1 1 Fn

我有一个场景,我需要将行转换为列,但我们没有每个客户的固定行数,这取决于他/她在表中输入值的字段数,这些行将在表中创建。假设我们在表单上有15个字段,他/她只填写了13行,那么只会为该客户创建13行值,如果某个客户填写了所有15个字段,那么该客户的表中将有15行

请您帮助我如何在这个可变行列表上编写查询,以及如何编写sql查询,以便使用单个查询将所有行转换为列

Sample Data: Id EntityId Key Value 1 1 Fname john 2 1 lname smith 3 1 city nyc 4 1 state ny 5 1 degree MBA 6 2 Fname john 7 2 lname smith 8 2 city nyc 9 2 state ny 样本数据: Id EntityId键值 1.我叫约翰 2 1我叫史密斯 3.1纽约市 4.1纽约州 5.1学位工商管理硕士 6.2我叫约翰 7.2我叫史密斯 8.2纽约市 9.2纽约州 如果您看到上面的数据,entityid=1有5条记录,2条只有4条


谢谢,也许你可以看看这个

SQL Pivot和Unpivot


测试数据

DECLARE @MyTable TABLE (Id INT,EntityId INT,[Key] VARCHAR(20),Value  VARCHAR(20))
INSERT INTO @MyTable VALUES
(1,1,'Fname' ,'john'),
(2,1,'lname' ,'smith'),
(3,1,'city'  ,'nyc'),
(4,1,'state' ,'ny'),
(5,1,'degree','MBA'),
(6,2,'Fname' ,'john'),
(7,2,'lname' ,'barbar'),
(8,2,'city'  ,'Mexico city'),
(9,2,'state' ,'MC')
查询

SELECT *
FROM
(
SELECT EntityId, [Key],Value FROM @MyTable)t
PIVOT(MIN(Value)
      FOR [Key]
      IN ([Fname],[lname],[city],[state],[degree])
      )p
结果集

╔══════════╦═══════╦════════╦═════════════╦═══════╦════════╗
║ EntityId ║ Fname ║ lname  ║    city     ║ state ║ degree ║
╠══════════╬═══════╬════════╬═════════════╬═══════╬════════╣
║        1 ║ john  ║ smith  ║ nyc         ║ ny    ║ MBA    ║
║        2 ║ john  ║ barbar ║ Mexico city ║ MC    ║ NULL   ║
╚══════════╩═══════╩════════╩═════════════╩═══════╩════════╝

这个问题似乎离题了,因为它需要代码。询问代码的问题必须通过展示尝试过的代码或研究来展示最小的努力。StackOverflow上存在许多类似的问题,主题是“从行到列”。这些问题将说明如何将动态SQL与pivot结合使用。链接答案没有多大帮助。您可以通过发布一个正在运行的轴心示例来改进您的答案。