【问题标题】:Checking if the rank is the same - TSQL检查排名是否相同 - SQL
【发布时间】:2020-01-07 19:04:51
【问题描述】:

我编写了一个代码,用于检索客户下订单的详细信息并返回下订单的日期。

USE[tsql2012];
WITH CTE_1
AS
(
select 
    [ID] = customers.custid
    ,[Name] = contactname
    ,[OrderID] = orders.orderid
    ,[Order Date] = orderdate 
    ,[Date] = format(orderdate,'MMMM-yy')

from sales.orders
left join sales.OrderDetails   on OrderDetails.orderid = orders.orderid
left join sales.Customers      on orders.custid = customers.custid
)

select 
    [ID] 
    ,[Name] 
    ,[OrderID]  
    ,[Date]
    ,[Rank] = DENSE_RANK() OVER (PARTITION BY [DATE] ORDER BY [ORDERID])

FROM CTE_1

这是我得到的代码

ID  NAME                   ORDERID    DATE     RANK
10  Bassols, Pilar Colome   10492   April-07    1
10  Bassols, Pilar Colome   10493   April-07    1

如何检查Rank 列是否包含多个相同排名编号的实例,因此如果在同一天下了两个订单,它应该像这样更改日期列:

ID  NAME                   ORDERID    DATE      RANK
10  Bassols, Pilar Colome   10492   April-07(1)  1
10  Bassols, Pilar Colome   10493   April-07(2)  1

【问题讨论】:

    标签: tsql rank


    【解决方案1】:

    下次请分享示例数据,最好作为带有 DML 的 DDL 和您的预期输出提供。

    试试这个:

    ,CONCAT([Date], '(',ROW_NUMBER() OVER(PARTITION BY [ID],[Date] ORDER BY [OrderId]),')') AS DateWithIndex
    

    如果我没有弄错,这应该将您给定的日期与按分组条件划分的运行编号连接起来......

    【讨论】:

      猜你喜欢
      • 2014-12-18
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      相关资源
      最近更新 更多