sql-server - 有没有办法转换客户 ID 及其最近的订单日期?

标签 sql-server sql-server-2005 t-sql pivot

我有一个查询,可以为我提供所有客户及其最近三个订单日期。

例如:

CustomerId DateOrdered
167 2006-09-16 01:25:38.060
167 2006-09-21 13:11:53.530
171 2006-08-31 15:19:22.543
171 2006-09-01 13:30:54.013
171 2006-09-01 13:34:36.483
178 2006-09-04 11:36:19.983
186 2006-09-05 12:50:27.153
186 2006-09-05 12:51:08.513

我想知道是否有办法将其旋转为这样显示:

[CustomerId]    [Most Recent] [Middle] [Oldest]
'167'   '2006-09-21 13:11:53.530'   '2006-09-16 01:25:38.060'   'NULL'
'171'    '2006-09-01 13:34:36.483'   '2006-09-01 13:30:54.013'   '2006-08-31 15:19:22.543'
'178'   '2006-09-04 11:36:19.983'   NULL    NULL
'186'   '2006-09-05 12:51:08.513'   '2006-09-05 12:50:27.153'   NULL    

最佳答案

;WITH YourQuery As
(
SELECT CustomerId, DateOrdered,
ROW_NUMBER() OVER (PARTITION BY CustomerId ORDER BY DateOrdered DESC) AS RN
FROM Orders
)
select [CustomerId],
MAX(CASE WHEN RN=1 THEN DateOrdered END) AS  [Most Recent] ,
MAX(CASE WHEN RN=2 THEN DateOrdered END) AS  [Middle] ,
MAX(CASE WHEN RN=3 THEN DateOrdered END) AS  [Oldest] 
FROM YourQuery
WHERE RN<=3
GROUP BY [CustomerId]

关于sql-server - 有没有办法转换客户 ID 及其最近的订单日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3401218/

相关文章:

sql - 如何用变量或别名替换大量表达式?

sql - 为什么这个 T-SQL 会重复结果

数据库服务器。为什么 [几乎] 任何类型的字段值都可以在查询/DML 中被视为带引号的字符串?

sql-server - 所有表 1 个全文目录和每个表 1 个全文目录哪个更好?

c# - 从数据库获取多个值 ASP.NET/C#

asp.net - 数据库中的自动增量功能

sql - 获取从星期二到星期一的一周中的数量总和

SQL Server 2005查询多个Access数据库?

sql - TSQL 比较两个集合

sql - 如何选择使用 IDENTITY_INSERT 或在单个语句中提供 IDENTITY_INSERT