我有一个包含3列的表:产品,日期,状态
我想以这种方式排名: 对于按日期的每个产品订单,如果状态= FALSE则为0,然后为0,如果它为TRUE,则开始按1排序,如果之前的状态为TRUE,则继续按相同的值排序。
在这个有序集合中,如果为FALSE赋值为0,对于同一产品的下一个TRUE状态,则赋值为x + 1(x此处为状态为TRUE的先前等级值)。
我希望图片更清晰
答案 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