我试图转换以下形式的数据:
| 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中实现此目的的最佳方法是什么?有没有更好的方法使用其他工具进行这样的转换?
答案 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