我有一个场景,我需要将行转换为列,但我们没有为每个客户提供固定的行数,这取决于他/她输入的值有多少字段,因为这些行将被创建在表中。假设我们在表单上有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
如果您看到上述数据,则entityid = 1有5条记录,2只有4条记录。
由于
答案 0 :(得分:1)
测试数据
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 ║
╚══════════╩═══════╩════════╩═════════════╩═══════╩════════╝
答案 1 :(得分:-2)