SQL:使用where字段作为另一个字段使用where条件

时间:2014-07-09 20:30:31

标签: sql sql-server-2008

我在数据库中有一个表:

DRN | VoucherNo | CrDRN
-----------------------    
1   |80        |?
2   |11        |?
3   |11        |?
4   |80        |?
5   |11        |?

我试图获取DRN列的CrDRN号码。

计算如下:

  • 凭证类型的每一行的CrDRN都是DRN
  • VoucherType为11的任何行都会有前一条记录的DRN个数,VoucherType等于80

因此,在这种情况下,CrDRN列值将为:

1
1
1
5
5

我在想我需要使用Where VoucherType = 80

但我无法理解第二个80的概念

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您可以使用相关子查询来实现此逻辑,假设"之前"基于drn列:

select drn, voucherno,
       (case when voucherno <> 0 then t.drn
             else (select t2.drn
                   from table t2
                   where t2.id < t.id and
                         t2.voucherno = 80
                   order by t2.drn desc
                   limit 1
                  )
        end) as crDRN
from table t;