Db2 SQL:合并多行的Select语句

问题描述 投票:0回答:1

我的表中有以下数据:

受赠人 TTNAME 已插入 允许删除 允许更新 禁止 时间戳
用户 1 TABLE_A Y Y Y 2023-01-01
用户 1 TABLE_A Y 2023-01-02

我想要一个 SQL select 语句,我可以在其中将这两行合并为一个结果,因为我对被授予者对表名 (TTNAME) 的权限感兴趣。时间戳列应该无关紧要/被忽略。

我想要以下结果:

受赠人 TTNAME 已插入 允许删除 允许更新 禁止
用户 1 TABLE_A Y Y Y Y

我尝试了几种选择,但没有一种有效。我总是得到 2 行分隔的结果。我想是因为他们有不同的时间戳!?

我得到:

受赠人 TTNAME 已插入 允许删除 允许更新 禁止
用户 1 TABLE_A Y Y Y
用户 1 TABLE_A Y

我尝试了以下陈述:

  1. 使用分组依据:
SELECT GRANTEE, TTNAME, INSERTALLOWED, DELETEALLOWED, UPDATEALLOWED, SELALLOWED
FROM AUTHTABLE
WHERE GRANTEE='USER1' AND TTNAME='TABLE_A'
GROUP BY GRANTEE, TTNAME, INSERTALLOWED, DELETEALLOWED, UPDATEALLOWED, SELALLOWED;
  1. 使用自连接:
SELECT A.GRANTEE, A.TTNAME, A.INSERTALLOWED, A.DELETEALLOWED, A.UPDATEALLOWED, A.SELALLOWED
FROM AUTHTABLE AS A
INNER JOIN AUTHTABLE AS B
ON A.GRANTEE=B.GRANTEE AND A.TTNAME=B.TTNAME
AND A.TIMESTAMP<=B.TIMESTAMP
WHERE A.GRANTEE='USER1' AND A.TTNAME='TABLE_A';

有没有办法将这两行合并为一行(通过忽略时间戳)?

任何帮助表示赞赏。谢谢。

sql db2
1个回答
0
投票

以下 SQL 正在运行:

SELECT GRANTEE, TTNAME, 
MAX(INSERTALLOWED) as INSERTALLOWED, 
MAX(DELETEALLOWED) as DELETEALLOWED,
MAX(UPDATEALLOWED) AS UPDATEALLOWED,
MAX(SELALLOWED) as SELALLOWED 
FROM AUTHTABLE 
WHERE GRANTEE='USER1' AND ttname='TABLE_A' 
GROUP BY GRANTEE, TTNAME;
© www.soinside.com 2019 - 2024. All rights reserved.