如何使用CASE子句(DB2)显示来自不同表的值?

如何使用CASE子句(DB2)显示来自不同表的值?,db2,case,Db2,Case,我在一家银行工作,所以我不得不调整查询中的列名和信息,以适应外部网络,因此如果有任何奇怪的错误,知道这有点好 我试图使用CASE子句来显示不同表中的数据,我知道这是一种解决方法,但由于某些情况,我有义务使用它,另外,弄清楚是否有实际的解决方案变得很有趣 我收到的以下查询错误是: “错误[21000][IBM][CLI驱动程序][DB2]SQL0811N标量的结果。” fullselect、SELECT INTO语句或VALUES INTO语句更重要 不止一排。” 编辑: 好的,我们正在使用DB2

我在一家银行工作,所以我不得不调整查询中的列名和信息,以适应外部网络,因此如果有任何奇怪的错误,知道这有点好

我试图使用CASE子句来显示不同表中的数据,我知道这是一种解决方法,但由于某些情况,我有义务使用它,另外,弄清楚是否有实际的解决方案变得很有趣

我收到的以下查询错误是:

“错误[21000][IBM][CLI驱动程序][DB2]SQL0811N标量的结果。” fullselect、SELECT INTO语句或VALUES INTO语句更重要 不止一排。”

编辑: 好的,我们正在使用DB2V9.7: DSN1015-DB21085I实例“DB2”使用“64”位,DB2代码版本“SQL09075”使用 级别标识符“08061007”。
信息性令牌是“DB2V9.7.500.702”、“s111017”、“IP23287”和修复包“5”。

使用listag函数包含所有结果

select  bank_num, branch_num, account_num, client_id,
CASE
    WHEN exists(
        select *
        from bank.services BS
        where ACCS.client_id= BS.sifrur_lakoach
        )
    THEN (select   LISTAGG(username, ', ') from bank.services BS
         where BS.client_id = ACCS.client_id)
        ELSE 'NONE'
            END username_new
from bank.accounts accs
where bank_num = 431 and branch_num = 170

检查是否在“然后选择”查询中为单个客户端id获取了多个用户名。另外,当使用exists时,只需使用“select 1”而不是“select*”。这是错误,但是记录太多了。在连接中显示用户名非常有效。我不知道如何指示THEN子句包含所有结果,如in()函数。您是否厌倦了左外部联接?因此,如果给定的
BS.client\u id
有多个
bank.services
行,您想将其中哪一个用于
用户名
?最好的方法是发布您的示例数据和预期结果。阅读Listag的文档后,这无疑是答案。但不幸的是,我们使用的是较旧的DB2版本,Listag不是一个公认的函数。DSN1015-DB21085I实例“DB2”使用“64”位,DB2代码版本“SQL09075”的级别标识符为“08060107”。信息令牌是“DB2V9.7.500.702”、“s111017”、“IP23287”和修复包“5”。
select  bank_num, branch_num, account_num, client_id,
CASE
    WHEN exists(
        select *
        from bank.services BS
        where ACCS.client_id= BS.sifrur_lakoach
        )
    THEN (select   LISTAGG(username, ', ') from bank.services BS
         where BS.client_id = ACCS.client_id)
        ELSE 'NONE'
            END username_new
from bank.accounts accs
where bank_num = 431 and branch_num = 170