尝试在HP Quality Center中运行SQL查询时收到错误消息。消息是“Quality Center无法运行查询,因为它包含无效语句。数据库是Oracle。我的查询是:
WITH AUDIT AS
(
SELECT AUDIT_LOG.AU_ENTITY_ID AS DEFECT_ID,
MIN(AUDIT_LOG.AU_TIME) AS Date_Deferred,
AUDIT_LOG.AU_USER AS UserName_Deferred
FROM AUDIT_LOG
INNER JOIN AUDIT_PROPERTIES
ON AUDIT_LOG.AU_ACTION_ID = AUDIT_PROPERTIES.AP_ACTION_ID
WHERE AUDIT_LOG.AU_ENTITY_TYPE = 'BUG'
AND AUDIT_LOG.AU_ACTION = 'UPDATE'
AND AUDIT_PROPERTIES.AP_TABLE_NAME = 'BUG'
AND AUDIT_PROPERTIES.AP_FIELD_NAME = 'BG_STATUS'
AND AUDIT_PROPERTIES.AP_NEW_VALUE = 'Deferred'
GROUP BY
AUDIT_LOG.AU_ENTITY_ID,AUDIT_LOG.AU_USER
),
WITH BUG_LIST AS
(
SELECT BUG.BG_BUG_ID/*Defect.Defect ID*/, BUG.BG_DETECTION_DATE /*Defect.Detected on Date*/, BUG.BG_USER_01 /*Defect.Application*/, BUG.BG_SEVERITY /*Defect.Severity*/, BUG.BG_STATUS /*Defect.Status*/, BUG.BG_USER_11 /*Defect.Planned Closing Date*/, BUG.BG_DETECTED_BY /*Defect.Detected By*/
FROM BUG /*Defect*/
WHERE BUG.BG_USER_17 /*Defect.Finding Group*/ = 'UAT'
ORDER BY BUG.BG_DETECTION_DATE ASC
)
SELECT *
FROM BUG_LIST
INNER JOIN AUDIT ON AUDIT.DEFECT_ID = BUG_LIST.BG_BUG_ID
“AUDIT”查询正在查找QC中的任何错误,该错误在某些时候已将其状态更改为“延迟”。这包含使用HPQC的所有团队的错误。 “BUG_LIST”查询专门查找“UAT”组找到的错误。我可以单独运行每个查询,并尝试将两者结合起来,以便获得“UAT”找到的错误列表。如果UAT发现的错误具有与之关联的延迟日期状态更改,请显示此信息,如果没有,请将此信息留空以用于特定缺陷。
我尝试此操作的原因是因为任何进入“延期”状态的错误都没有像关闭的错误那样的“计划结束日期”。因此,我希望看到错误进入延期状态的日期,而不是关闭日期,并考虑我的“关闭日期”。
HPQC不支持“WITH”语句吗?有什么方法可以成功组合并运行这些查询吗?
答案 0 :(得分:1)
您只需要with
出现一次,因此请在BUG_LIST之前移除with
:
WITH AUDIT AS
(
SELECT
AUDIT_LOG.AU_ENTITY_ID AS DEFECT_ID,
MIN(AUDIT_LOG.AU_TIME) AS Date_Deferred,
AUDIT_LOG.AU_USER AS UserName_Deferred
FROM AUDIT_LOG
INNER JOIN AUDIT_PROPERTIES
ON AUDIT_LOG.AU_ACTION_ID = AUDIT_PROPERTIES.AP_ACTION_ID
WHERE AUDIT_LOG.AU_ENTITY_TYPE = 'BUG' AND AUDIT_LOG.AU_ACTION = 'UPDATE' AND AUDIT_PROPERTIES.AP_TABLE_NAME = 'BUG' AND AUDIT_PROPERTIES.AP_FIELD_NAME = 'BG_STATUS' AND AUDIT_PROPERTIES.AP_NEW_VALUE = 'Deferred'
GROUP BY
AUDIT_LOG.AU_ENTITY_ID,AUDIT_LOG.AU_USER
),
BUG_LIST AS
(
SELECT BUG.BG_BUG_ID/*Defect.Defect ID*/, BUG.BG_DETECTION_DATE /*Defect.Detected on Date*/, BUG.BG_USER_01 /*Defect.Application*/, BUG.BG_SEVERITY /*Defect.Severity*/, BUG.BG_STATUS /*Defect.Status*/, BUG.BG_USER_11 /*Defect.Planned Closing Date*/, BUG.BG_DETECTED_BY /*Defect.Detected By*/
FROM BUG /*Defect*/
WHERE BUG.BG_USER_17 /*Defect.Finding Group*/ = 'UAT'
ORDER BY BUG.BG_DETECTION_DATE ASC
)
SELECT *
FROM BUG_LIST
INNER JOIN AUDIT ON AUDIT.DEFECT_ID = BUG_LIST.BG_BUG_ID
您始终可以使用子查询将这些组合成单个from
语句:
select *
from (your bug_list query here) bl inner join
(your audit query here) a
on a.defect_id = bl.bd_bug_id
答案 1 :(得分:0)
WITH 通常用于允许您重复使用其中一个 with子句。在这种情况下,它不是必需的,因此查询可以像这样重写。 (我无法测试这个)
SELECT audit.*, bug_list.*
FROM
(
SELECT BUG.BG_BUG_ID/*Defect.Defect ID*/,
BUG.BG_DETECTION_DATE /*Defect.Detected on Date*/,
BUG.BG_USER_01 /*Defect.Application*/,
BUG.BG_SEVERITY /*Defect.Severity*/,
BUG.BG_STATUS /*Defect.Status*/,
BUG.BG_USER_11 /*Defect.Planned Closing Date*/,
BUG.BG_DETECTED_BY /*Defect.Detected By*/
FROM BUG /*Defect*/
WHERE BUG.BG_USER_17 /*Defect.Finding Group*/ = 'UAT'
) BUG_LIST,
(
SELECT AUDIT_LOG.AU_ENTITY_ID AS DEFECT_ID,
MIN(AUDIT_LOG.AU_TIME) AS Date_Deferred,
AUDIT_LOG.AU_USER AS UserName_Deferred
FROM AUDIT_LOG
INNER JOIN AUDIT_PROPERTIES
ON AUDIT_LOG.AU_ACTION_ID = AUDIT_PROPERTIES.AP_ACTION_ID
WHERE AUDIT_LOG.AU_ENTITY_TYPE = 'BUG'
AND AUDIT_LOG.AU_ACTION = 'UPDATE'
AND AUDIT_PROPERTIES.AP_TABLE_NAME = 'BUG'
AND AUDIT_PROPERTIES.AP_FIELD_NAME = 'BG_STATUS'
AND AUDIT_PROPERTIES.AP_NEW_VALUE = 'Deferred'
GROUP BY
AUDIT_LOG.AU_ENTITY_ID,AUDIT_LOG.AU_USER
) AUDIT
INNER JOIN AUDIT
ON AUDIT.DEFECT_ID = BUG_LIST.BG_BUG_ID
ORDER BY BUG_list.BG_DETECTION_DATE ASC