gpt4 book ai didi

SQL Server 如何在没有 PIVOT 或 UNPIVOT 或聚合的情况下将行转置为列

转载 作者:行者123 更新时间:2023-12-05 01:17:32 24 4
gpt4 key购买 nike

编辑 1: 两种解决方案和 DUPE 链接都有效,但它们都没有保留我想要的列顺序。所有解决方案都按字母顺序对生成的列名称进行排序。如果有人对此有解决方案,请在评论中发表。

编辑 2: @taryn已发布 SQL Fiddle在评论中,列也会排序:)


我已经看到无数关于这样做的答案,但没有一个是我想要实现的。几乎所有都涉及进行聚合或分组。因此,在您急于将其标记为 DUPE 之前,请先完整阅读该问题。

我要做的就是将行转换为列,原始结果集的列名成为新结果集第一列的行值。

这是我的数据的样子,以及我想如何转换/转置它。

enter image description here

我已对其进行了颜色编码,以便您可以快速清晰地理解这一点。

在 excel 中,我会选择第一个表,复制它,然后右键单击并将其粘贴为 选择性粘贴 并选中 Transpose 复选框。

我试过 PIVOTUNPIVOT 似乎都没有给我想要的东西。我可能没有正确使用它,但我花费的时间比我预期的要多。

我已经用源表、示例数据和我在这里的期望创建了一个 SQL Fiddle,所以你可以从 => http://www.sqlfiddle.com/#!18/56afd/10 开始。

这也是内联粘贴的代码。

IF OBJECT_ID ('dbo.Players') IS NOT NULL
DROP TABLE dbo.Players;

CREATE TABLE dbo.Players
(
PlayerID INT
, Win INT
, Defeat INT
, StandOff INT
, CONSTRAINT PK_Players PRIMARY KEY CLUSTERED (PlayerID) ON [PRIMARY]
);
INSERT INTO dbo.Players (PlayerID, Win, Defeat, StandOff)
VALUES
(1, 7, 6, 9),
(2, 12, 5, 0),
(3, 3, 11, 1);

这是预期的输出

SELECT * FROM dbo.Players;

-- Need to Transpose above results, into the following.

-- -------------------------------------------------------------------
-- | Stat_Type | Player_1 | Player_2 | Player_3 |
-- -------------------------------------------------------------------
-- | Win | 7 | 12 | 3 |
-- -------------------------------------------------------------------
-- | Defeat | 6 | 5 | 11 |
-- -------------------------------------------------------------------
-- | StandOff | 9 | 0 | 1 |
-- -------------------------------------------------------------------

-- Column Names become Row values for 1st column
-- PlayerId becomes column names

最佳答案

使用UNPIVOT/PIVOT:

WITH unpiv AS (
SELECT PlayerId, col, value
FROM dbo.Players
UNPIVOT (VALUE FOR col IN (Win, Defeat, StandOff)) unpiv
)
SELECT col AS Stat_Type, [1] AS Player1, [2] AS Player2, [3] AS Player3
FROM unpiv
PIVOT (MAX(value) FOR PlayerId IN ([1], [2], [3])) piv
ORDER BY CASE col WHEN 'Win' THEN 1 WHEN 'Defeat' THEN 2 ELSE 3 END;

DBFiddle Demo

关于SQL Server 如何在没有 PIVOT 或 UNPIVOT 或聚合的情况下将行转置为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49761712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com