将行中的数据转换为列

时间:2018-02-08 14:59:36

标签: sql sql-server-2017

我试图转换以下形式的数据:

| ID | X | Y |
--------------
| 1  | a | m |
| 1  | b | n |
| 1  | c | o |
| 2  | d | p |
| 2  | e | q |
| 3  | f | r |
| 3  | g | s |
| 3  | h |   |

以这种形式:

| ID | X1 | X2 | X3 | Y1 | Y2 | Y3 |
------------------------------------
| 1  | a  | b  | c  | m  | n  | o  |
| 2  | d  | e  |    | p  | q  |    |
| 3  | f  | g  | h  | r  | s  |    |

在SQL Server 2017中实现此目的的最佳方法是什么?有没有更好的方法使用其他工具进行这样的转换?

1 个答案:

答案 0 :(得分:0)

我认为你不能在数据库方面解决这个问题。你应该做一些后端编程。如果要将行值反转为列,但希望根据重复的ID对它们进行分组,则可以使用Pivot函数。我将通过使用下面的查询检查重复项来解决此问题。在该查询的结果中,您将能够获得重复ID的最大计数。例如,1次重复3次,因此您需要在后端代码中创建一个包含3x2 + 1 = 7列的数据表。 1代表id列。之后,您可以通过检查每个ID的数据来填充该表。

WITH Temp (id, count)
AS
( 
Select id, count(*)
from MyTable
group by id
having count(*)>1
)
select max(count) from Temp