所以我有两个db2表。一个包含工作订单信息,如id,请求者名称,用户,描述等。具有注释的第二个表,其键入另一个表的id。 notes字段是255文本字段(是的,不建议更改它,我无法控制它)。因此,在音符字段中可能会有多个结果,或者没有,这取决于显然有多少音符。
我有一个查询来获取结果。问题是我从连接中获得了多个结果,因为有多个条目。
所以我的问题是如何将notes表中的结果连接/合并到每个结果的一个字段中?感谢
代码:
SELECT
p.ABAANB AS WO_NUMBER,
p.ABAJTX AS Description,
i.AIAKTX as Notes
FROM
htedta.WFABCPP p LEFT JOIN HTEDTA.WFAICPP i
ON i.AIAANB = p.ABAANB
WHERE
p.ABABCD = 'ISST' AND p.ABAFD8 = 0
答案 0 :(得分:0)
你试过LISTAGG
吗?https://www.ibm.com/developerworks/mydeveloperworks/blogs/SQLTips4DB2LUW/entry/listagg?lang=en
它将允许您合并所有那些导致其他记录的讨厌字段...像这样......
SELECT p.ABAANB AS WO_NUMBER, p.ABAJTX AS Description, LISTAGG(i.AIAKTX, ' ') as Notes
FROM htedta.WFABCPP p
LEFT JOIN HTEDTA.WFAICPP i
ON i.AIAANB = p.ABAANB
WHERE p.ABABCD = 'ISST'
AND p.ABAFD8 = 0
GROUP BY p.ABAAMB, p.ABAJTX
答案 1 :(得分:0)
您使用的是哪个版本的DB2?如果您正在使用DB2 Linux / Unix / Windows(LUW),那么这应该适合您:
SELECT p.ABAANB AS WO_NUMBER,
p.ABAJTX AS Description,
,SUBSTR(
xmlserialize(
xmlagg(
xmltext(
concat(',' , TRIM(i.AIAKTX))
)
) AS VARCHAR(4000)
)
,2) AS NOTES
FROM htedta.WFABCPP p
LEFT JOIN HTEDTA.WFAICPP i
ON i.AIAANB = p.ABAANB
WHERE p.ABABCD = 'ISST'
AND p.ABAFD8 = 0
GROUP BY p.ABAANB,
p.ABAJTX
答案 2 :(得分:0)
如果您运行DB2至少9.7,您应该能够使用类似于此的XMLAGG函数
WITH CombinedNotes( aiaanb, aiaktx) AS (
SELECT aiaanb
, REPLACE( REPLACE(
CAST( XML2CLOB(
XMLAGG( XMLELEMENT(
NAME 'A'
, aiaktx
))
) AS VARCHAR( 3000))
, '<A>',''), '</A>', '')
FROM Htedta.WfaIcpp)
SELECT p.ABAANB AS WO_NUMBER, p.ABAJTX AS Description, i.AIAKTX as Notes
FROM htedta.WFABCPP p
LEFT JOIN CombinedNotes i
ON i.AIAANB = p.ABAANB
WHERE p.ababcd = 'ISST'
AND p.abafd8 = 0;
如果您有早期版本的DB2,或者您的登录由于某种原因不允许XML函数,您可以使用递归查询来解决问题。这两种技术都在以下博客中描述