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