在 T-SQL 中将多行转换为具有多列的一行

Posted

技术标签:

【中文标题】在 T-SQL 中将多行转换为具有多列的一行【英文标题】:Convert multiple rows into one row with multiple columns in T-SQL 【发布时间】:2021-12-05 18:34:44 【问题描述】:

我知道有一个名为 PIVOT 的命令,这可能是我需要的,但第一次尝试使用它时,似乎无法使用它的语法。

这是我的示例数据:

CREATE TABLE MyTable 
(
    CompanyName NVARCHAR(20),
    Price INT,
    Project NVARCHAR(50)
);

INSERT INTO dbo.MyTable (CompanyName, Price, Project)
VALUES ('Dell', 450, 'Cleaning'),
       ('Dell', 150, 'Vaccuming'),
       ('Dell', 1200, 'Painting'),
       ('Dell', 100, 'VendingMachines'),
       ('Dell', 600, 'Wallpapers'),
       ('Dell', 820, 'Carpeting')

我希望那些 Project Name 变成列,例如具有 "Cleaning" 、 "Carpeting" 等列,然后每列的值是 Price

这是我目前尝试过的,但语法错误:

SELECT *
FROM
    (SELECT CompanyName, Price, Project
     FROM dbo.MyTable) src
PIVOT
    (SUM(Price)
        FOR Project IN ('Cleaning', 'Vaccuming', 'Painting', 'VendingMachines', 'Wallpapers', 'Carpeting')
    ) piv;

【问题讨论】:

【参考方案1】:

括号[]你的列名

示例或dbFiddle

SELECT *
FROM
(
  SELECT  CompanyName, Price, Project
  FROM dbo.MyTable
) src
PIVOT
(
  SUM(Price)
  FOR Project IN ([Cleaning], [Vaccuming], [Painting], [VendingMachines], [Wallpapers], [Carpeting])
) piv;

【讨论】:

以上是关于在 T-SQL 中将多行转换为具有多列的一行的主要内容,如果未能解决你的问题,请参考以下文章

excel怎么把1行转多列多行

hive如何实现多行转多列

Oracle:多列转多行

C#将查询返回的数据(一行多列)怎么转换成一列多行dataTable?

怎么将excel中两列转换成多行多列

sql中一对多关系的查询结果的多行转换成一行多列