根据条件对结果进行排序

时间:2016-09-28 22:38:30

标签: tsql sql-server-2012 rank

我有一个包含3列的表:产品,日期,状态

我想以这种方式排名: 对于按日期的每个产品订单,如果状态= FALSE则为0,然后为0,如果它为TRUE,则开始按1排序,如果之前的状态为TRUE,则继续按相同的值排序。

在这个有序集合中,如果为FALSE赋值为0,对于同一产品的下一个TRUE状态,则赋值为x + 1(x此处为状态为TRUE的先前等级值)。

我希望图片更清晰

enter image description here

2 个答案:

答案 0 :(得分:1)

此代码使用SS2008R2功能,但不包括lngLast = wbkOtherWorkbook.range("A" & rows.count).end(xlup).row lngInvoiceNum = wbkOtherWorkbook.range("A" & lnglast).value +1 wbkOtherWorkbook.range("A" & lnglast+1).value = lngInvoiceNum / LEAD。对于更现代的SQL Server版本,当然可以使用更好的解决方案。

LAG

请注意,使用Mark I Eyeball从图像中提取样本数据。如果OP注意到建议here,那就更容易了。

提示:使用不匹配数据类型和关键字的列名会使生活更简单。

答案 1 :(得分:-1)

尝试此查询,

SELECT  a.Product ,
    a.Date ,
    a.Status ,
    CASE WHEN a.Status = 'FALSE' THEN 0
         ELSE 1
    END [Rank]

FROM(选择产品,                     日期,                     状态 ,                     ROW_NUMBER()OVER(产品按日期分区,状态)RNK           来自TableProduct         ) 一个 按产品订购,a.RNK