sql - SQL 透视列值
问题描述
我已尝试遵循此和此(SQL Server 特定解决方案),但没有帮助。
我有两张表,Product和Sale,我想知道每天售出多少产品。但我想旋转表格,使列成为产品名称,每一行将包含按天订购的每天销售的产品数量。
简化架构如下
CREATE TABLE product (
id integer,
name varchar(40),
price float(2)
);
CREATE TABLE sale(
id integer,
product_id integer,
transaction_time timestamp
);
这就是我要的
我只设法汇总每种产品每天的总销售额,但我无法调整产品名称。
select date(sale.transaction_date)
, product.id
, product.name
, count(product_id)
from sale inner join
product on sale.product_id = product.id
group by date(sale.transaction_date)
, product.id
, product.name
这是目前的情况
请建议。
解决方案
您需要旋转逻辑,例如
select
s.transaction_date::date,
count(case when p.name = 'intelligent_rubber_clock' then 1 end) as intelligent_rubber_clock,
count(case when p.name = 'intelligent_iron_wallet' then 1 end) as intelligent_iron_wallet,
count(case when p.name = 'practical_marble_car' then 1 end) as practical_marble_car
from sale s
inner join product p
on s.product_id = p.id
group by
s.transaction_date::date;
GROUP BY
由于您的预期输出仅按日期汇总,因此您的条款中应仅包含交易日期。这里使用的技巧是计算一个CASE
表达式的计数,当记录来自给定产品时返回 1,否则返回 0。这会为每个产品生成条件计数,所有产品都在单独的列中。要添加更多列,只需添加更多条件计数。
推荐阅读
- sql - Chaining multiple queries in SQL
- c++ - QML pointer handlers and handling grab changes
- kotlin - Kotlin multiplatform. Ktor download big file and save to local file
- google-forms - How to set event listeners to Google Forms in script
- asp.net-mvc - How to create memory cache with async generator
- visual-studio-code - 由于未知问题,Visual Studio Code 颜色主题在启动时重置
- powershell - 在 powershell 中无法识别 get-windowsfeatures
- javascript - 当我有多个使用效果时,将调用使用效果清理功能
- python - 如何在已反转的字符串中添加空格?
- html - 它给出的三个链接标签中要从谷歌字体复制哪个链接标签?