sql - 为每位客户提供多项交易
问题描述
我有一个提供客户交易信息的查询。每个客户都有多个交易和这些交易的指定。查询输出 CustomerId、Amount、Date、Designation。每个客户都有多行。我想对此进行旋转,以便每个客户只有一行。
我知道这不是表示这些数据的理想方式,但出于这个特定用例的目的,它必须采用这种格式。列数将是(每个客户的最大交易数)X 3
解决方案
要遍历每个客户端的固定事务列表,您可以使用row_number()
条件聚合:
select
CustomerId,
max(case when rn = 1 then Amount end) Amount1,
max(case when rn = 1 then DateReceived end) DateReceived1,
max(case when rn = 1 then Account end) Account1,
max(case when rn = 2 then Amount end) Amount2,
max(case when rn = 2 then DateReceived end) DateReceived2,
max(case when rn = 2 then Account end) Account2,
max(case when rn = 3 then Amount end) Amount3,
max(case when rn = 3 then DateReceived end) DateReceived3,
max(case when rn = 3 then Account end) Account3
from (
select t.*, row_number() over(partition by CustomerId order by DateReceived) rn
from mytable t
) t
group by CustomerId
每个客户端最多可以处理 3 个事务。更多信息,您可以使用更多表达式元组来扩展select
子句。max(case when rn = ... then ... end)
推荐阅读
- apache - 尝试允许使用 .htaccess 从特定链接访问我的网站
- c# - C# 正则表达式匹配具有不在引号中的双条的字符串
- scala - lwjgl scala sbt macOS 问题
- python - 如果一个单元格值大于另一个单元格值,如何突出显示一行?
- r - 在 for 循环中遍历列的后缀。R
- asp.net-core - 提高 Odata 控制器 Get() 的性能
- java - 使用 UISelector 查询在另一个元素中按文本查找元素
- javascript - Redux Form - 如何删除 Redux Form 中的状态项
- sql-server - SQL Server 中具有聚合函数的嵌套 SQL 选择语句
- r - 突出显示活动标签