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

时间:2014-02-12 21:50:43

标签: sql-server pivot

我有一个场景,我需要将行转换为列,但我们没有为每个客户提供固定的行数,这取决于他/她输入的值有多少字段,因为这些行将被创建在表中。假设我们在表单上有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条记录。

由于

2 个答案:

答案 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)