T-SQL:没有聚合的数据透视表

Posted

技术标签:

【中文标题】T-SQL:没有聚合的数据透视表【英文标题】:T-SQL : Pivot table without aggregate 【发布时间】:2019-09-01 06:06:38 【问题描述】:

我试图了解如何在 T-SQL 中透视数据,但似乎无法使其正常工作。我有以下表结构

+-------------------+-----------------------+
|       Name        |         Value         |
+-------------------+-----------------------+
| TaskId            | 12417                 |
| TaskUid           | XX00044497            |
| TaskDefId         | 23                    |
| TaskStatusId      | 4                     |
| Notes             |                       |
| TaskActivityIndex | 0                     |
| ModifiedBy        | Orange                |
| Modified          | /Date(1554540200000)/ |
| CreatedBy         | Apple                 |
| Created           | /Date(2121212100000)/ |
| TaskPriorityId    | 40                    |
| OId               | 2                     |
+-------------------+-----------------------+

我想将名称列转换为预期输出的列

+--------+------------------------+-----------+--------------+-------+-------------------+------------+-----------------------+-----------+-----------------------+----------------+-----+
| TASKID |        TASKUID         | TASKDEFID | TASKSTATUSID | NOTES | TASKACTIVITYINDEX | MODIFIEDBY |       MODIFIED        | CREATEDBY |        CREATED        | TASKPRIORITYID | OID |
+--------+------------------------+-----------+--------------+-------+-------------------+------------+-----------------------+-----------+-----------------------+----------------+-----+
|        |                        |           |              |       |                   |            |                       |           |                       |                |     |
| 12417  | XX00044497             | 23        | 4            |       | 0                 | Orange     | /Date(1554540200000)/ | Apple     | /Date(2121212100000)/ | 40             | 2   |
+--------+------------------------+-----------+--------------+-------+-------------------+------------+-----------------------+-----------+-----------------------+----------------+-----+

有没有简单的方法?列是固定的(不是动态的)。

任何帮助表示赞赏

【问题讨论】:

【参考方案1】:

试试这个:

select * from yourtable
pivot
(
 min(value)
 for Name in ([TaskID],[TaskUID],[TaskDefID]......)
) as pivotable

您也可以使用案例陈述。 您必须在数据透视表中使用聚合函数。

如果你想了解更多,这里是参考:

https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-2017

输出(我只试了三列):

DB<>Fiddle

【讨论】:

以上是关于T-SQL:没有聚合的数据透视表的主要内容,如果未能解决你的问题,请参考以下文章

在没有聚合的熊猫数据透视表中重复条目并重命名列行

T-SQL 中的数据透视表分区

数据透视表中聚合函数的必要性是啥

T-SQL :: 列出所有表、列和透视内容

Sql Server 聚合或数据透视表查询

具有多个聚合值的数据透视表