首页 > 解决方案 > T-SQL:没有聚合的数据透视表

问题描述

我试图了解如何在 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   |
+--------+------------------------+-----------+--------------+-------+-------------------+------------+-----------------------+-----------+-----------------------+----------------+-----+

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

任何帮助表示赞赏

标签: tsqlsql-server-2005pivot

解决方案


尝试这个:

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

您还可以使用case 语句。您必须在数据透视表中使用聚合函数。

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

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

输出(我只尝试了三列):

DB<>小提琴


推荐阅读