HP Quality Center中的“WITH”SQL语句 - 无效语句 - Oracle DB

时间:2012-12-05 20:58:30

标签: sql oracle inner-join common-table-expression hp-quality-center

尝试在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”语句吗?有什么方法可以成功组合并运行这些查询吗?

2 个答案:

答案 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