Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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来检测一列是否包含另一列_Sql_Db2 - Fatal编程技术网

SQL来检测一列是否包含另一列

SQL来检测一列是否包含另一列,sql,db2,Sql,Db2,我尝试查询如下: VOUCHER TYPE RESULT vchr1 REV CONTAINS REV vchr1 REV CONTAINS REV vchr1 COR CONTAINS REV vchr2 COR NOT CONTAINS REV vchr2 COR NOT CONTAINS REV 我需要检测凭证是否包含REV,并在行级别给出标志。我试过分区,但没有

我尝试查询如下:

   VOUCHER   TYPE    RESULT
   vchr1     REV     CONTAINS REV
   vchr1     REV     CONTAINS REV
   vchr1     COR     CONTAINS REV
   vchr2     COR     NOT CONTAINS REV
   vchr2     COR     NOT CONTAINS REV

我需要检测凭证是否包含REV,并在行级别给出标志。我试过分区,但没有成功。有什么想法吗?

使用
案例
表达式和
存在

select t.*,
  case when exists (select 1 from tablename where voucher = t.voucher and type = 'REV') 
       then 'CONTAINS REV' 
       else 'NOT CONTAINS REV' 
   end result
from tablename t
是的,你可以用SUM()OVER()来做


谢谢,但这不会给我想要的结果。这将只在行级别,但我需要这样标记所有凭证,如果条件为真,至少在凭证的一行中。看起来优雅且逻辑合理,但由于某些原因,查询不理解总和部分的等号。(意外字符)。选择。。。。。。。当0表示“不包含修订”或“其他”表示“包含修订”结束时,将(由A.COUSERK\U NBR分割的)和(ABS(A.AMTDLR\U REP)/2)加在(由A.COUSERK\U NBR分割的)上作为凭证金额,(CASE SUM(A.MARGER='320')加在(由A.COUSERK\U NBR分割的)上作为标志从。。。。。。错误:在“AS*AT OPTION YEAR YEARS MONTH DAY DAYS HOUR HOURS”之后发现意外标记“=”。预期的标记可能包括:“{2}”@MichalPalko刚刚进行了编辑,您使用的是哪个平台和版本的db2?仍然是相同的错误。在我的pc 10.5中,不幸的是我不知道是哪台服务器。有趣的是,即使我将simple TYPE='REV'声明为FLAG,它也会抛出相同的错误-我希望为true或false。值CHAR(1=1)是否返回true?我认为在V11.1之前的查询中不能使用布尔类型,我认为最好使用@forpas版本和exists
select
  VOUCHER,
  TYPE,
  CASE SUM(CASE TYPE WHEN 'REV' THEN 1 ELSE 0 END) OVER(PARTITION BY VOUCHER)
    when 0 then 'NOT CONTAINS REV' else 'CONTAINS REV' end 
from tablename