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