0

我在尝试在HP Quality Center中运行SQL查询时收到错误消息。该消息是“因为它包含无效的报表质量中心无法运行查询的数据库是Oracle我的查询是:HP Quality Center中的“WITH”SQL语句 - 无效的语句 - Oracle DB

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 

‘审核’查询寻找有QC任何错误,在某些时候,其状态更改为“延迟”,其中包含使用HPQC的所有团队的错误,“BUG_LIST”查询专门查找由“UAT”组发现的错误,我可以单独运行每个查询并尝试合并如果UAT发现的错误与它有关联的延迟日期状态改变,则显示该信息,如果没有,则将该信息留空以用于特定缺陷

我在的原因诱惑这是因为任何进入“延期”状态的错误都没有像计划关闭的错误那样的“计划关闭日期”。因此,我希望看到错误进入延期状态的日期,并认为我的“关闭日期”。

HPQC是否不支持“WITH”语句?有什么方法可以成功结合并运行这些查询吗?

+0

我相信WITH出现在9i。 – EvilTeach

回答

1

你只需要with出现一次,所以删除with前BUG_LIST:

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 using语句子查询:

select * 
from (your bug_list query here) bl inner join 
    (your audit query here) a 
    on a.defect_id = bl.bd_bug_id 
+0

我在想同样的事情,但我更新了它,仍然收到相同的错误。任何其他想法? – pkracer

+0

人们会注意到,除了使查询运行更长以外,BUG_LIST中的顺序没有任何效果。 – EvilTeach

+0

@EvilTeach。 。 。它是否运行更长取决于SQL引擎。在许多情况下,子查询中的'order by'被忽略。 –

0

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 
+0

感谢您的反馈。查询以不同的错误运行。 “ORA-00936:缺少表达。” – pkracer