gpt4 book ai didi

sql - 我如何在 sql server 2005 中将行转换为列

转载 作者:行者123 更新时间:2023-12-03 14:12:18 25 4
gpt4 key购买 nike

有一个question在具有相同标题的 stackoverflow 中,但这不是我要找的。
我有一张像下面这样的 table

Name   | Count  
----------------
Chery | 257
Drew | 1500
Morgon | 13
Kath | 500
Kirk | 200
Matt | 76

我需要将这个结果集转换成这样的
Chery | Drew | Morgon | Kath | Kirk | Matt  
-------------------------------------------
257 1500 13 500 200 76

我如何使用 sql server 2005 实现这一点?

最佳答案

有类似问题here , here在 stackoverflow 中回答。

您需要使用运算符 PIVOT 在您的查询中实现这一点。这是有关如何做到这一点的示例和说明。该示例引用自 this 来源。

---I assumed your tablename as TESTTABLE---
DECLARE @cols NVARCHAR(2000)
DECLARE @query NVARCHAR(4000)

SELECT @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'

SET @query = N'SELECT '+ @cols +' FROM
(SELECT t1.Name , t1.Count FROM TESTTABLE AS t1) p
PIVOT (MAX([Count]) FOR Name IN ( '+ @cols +' ))
AS pvt;'

EXECUTE(@query)

说明

1.查询的第一部分
SELECT  @cols = STUFF(( SELECT DISTINCT TOP 100 PERCENT
'],[' + t.Name
FROM TESTTABLE AS t
ORDER BY '],[' + t.Name
FOR XML PATH('')
), 1, 2, '') + ']'

在单行中为您的 Name 列值提供一个很好的扁平结果,如下所示
[Cheryl],[Drew],[Karen],[Kath],[Kirk],[Matt]  

您可以了解有关 STUFF 和 XML 路径的更多信息 herehere .

2. SELECT + @cols + FROM将选择所有行作为最终结果集的列名(pvt - 步骤 3)

IE
Select [Chery],[Drew],[Morgan],[Kath],[Kirk],[Matt] 

3.此查询提取我们需要创建交叉表结果的所有数据行。查询之后的 (p) 正在创建结果的临时表,然后可以使用该表来满足步骤 1 的查询。
(SELECT t1.Name, t1.Count FROM  TESTTABLE AS t1) p

4.PIVOT表达式
PIVOT (MAX (Count) FOR Name IN ( @cols) AS pvt

进行实际汇总并将结果放入名为 pvt 的临时表中
Chery | Drew | Morgon | Kath | Kirk | Matt  
-------------------------------------------
257 1500 13 500 200 76

关于sql - 我如何在 sql server 2005 中将行转换为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2344590/

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