繁体   English   中英

在 SQL 中旋转具有一行的表

[英]Pivoting a table with one row in SQL

我有一份每周报告,我必须在其中分享我们的表现。 我有以下查询

SELECT COUNT(*) AS Transactions,
COUNT(DISTINCT id) as Customers,
SUM(CASE WHEN Product in ('Paper','Pen','Eraser') THEN 1 ELSE 0 END) School_Supplies,
SUM(CASE WHEN Product in ('Paper','Pen','Eraser') THEN Payment ELSE 0 END) AS School_Supplies_Revenue
FROM dbo.Transactions

这给了我桌子

Transactions | Customers | School_Supplies | School_Supplies_Revenue
12845        |  9654     |  1546           |  8745

我希望 pivot 的表格看起来像这样

KPI                      | Value
Transactions             | 12845
Customers                | 9654
School_Supplies          | 1546
School_Supplies_Revenue  | 8745

我尝试使用 UNPIVOT,但它不起作用。 我怎样才能 pivot 这个表使列名及其各自的值成为数据点?

我的数据库如下所示:

[ID] | [Product] | [Cost per Item] | [Payment] | [Transaction Date]
001  | Paper     |  2.15           |  5.54     | 2021-01-12

在 SQL 服务器中,可能apply最简单的方法:

SELECT v.*
FROM (SELECT COUNT(*) AS Transactions,
             COUNT(DISTINCT id) as Customers,
             SUM(CASE WHEN Product in ('Paper','Pen','Eraser') THEN 1 ELSE 0 END) as School_Supplies,
            SUM(CASE WHEN Product in ('Paper','Pen','Eraser') THEN Payment ELSE 0 END) AS School_Supplies_Revenue
      FROM dbo.Transactions t
     ) t CROSS APPLY
     (VALUES ('Transactions', Transactions),
             ('Customers', customers),
             ('School_Supplies', School_Supplies),
             ('School_Supplies_Revenue', School_Supplies_Revenue)
     ) v(kpi, value);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM