Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:使用where条件将一个字段用作另一个字段_Sql_Sql Server 2008 - Fatal编程技术网

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

SQL:使用where条件将一个字段用作另一个字段,sql,sql-server-2008,Sql,Sql Server 2008,我在数据库中有一个表: DRN | VoucherNo | CrDRN ----------------------- 1 |80 |? 2 |11 |? 3 |11 |? 4 |80 |? 5 |11 |? 我正在尝试获取CrDRN列的DRN编号 计算如下: 凭证类型的每一行的CrDRN将是其DRN编号 VoucherType为11的任何行将具有VoucherType等于80的上一条记录的DRN

我在数据库中有一个表:

DRN | VoucherNo | CrDRN
-----------------------    
1   |80        |?
2   |11        |?
3   |11        |?
4   |80        |?
5   |11        |?
我正在尝试获取CrDRN列的DRN编号

计算如下:

凭证类型的每一行的CrDRN将是其DRN编号 VoucherType为11的任何行将具有VoucherType等于80的上一条记录的DRN编号 因此,在本例中,CrDRN列的值为:

1
1
1
5
5
我想我需要使用一个Where VoucherType=80的

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


您可以使用相关子查询实现此逻辑,前提是previous基于drn列:


如何定义上一条记录?这听起来很危险-我强烈建议您重新设计此表,这样就不会有任何行的值依赖于其他行。所有这些都存储在一个表中。是的,本质上这是为了看看哪些记录有11个属于哪些记录上面的记录有80个凭证类型。基本上就像存款单上有许多属于它的支票一样,这就是系统如何知道这些支票属于存款单的方式
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;