【问题标题】:Need help in Merging Two query for HP ALM在合并 HP ALM 的两个查询方面需要帮助
【发布时间】:2017-11-18 03:40:48
【问题描述】:

我在 HP ALM 中有两个不同的查询,但我想将其合并为一个。我在 SQL 查询方面不是那么好,所以我在合并查询方面遇到了困难。

查询 1:获取测试人员的执行次数

Select
 TESTCYCL.TC_ACTUAL_TESTER as 'Tester',
 sum(case when TC_Status In('Blocked','Passed','Failed','Not Completed') then 1 else 0 end) as 'Total',
 sum(case when TC_Status = 'Passed' then 1 else 0 end) as 'Pass',
 sum(case when TC_Status = 'Failed' then 1 else 0 end) as 'Fail',
 sum(case when TC_Status = 'Blocked' then 1 else 0 end) as 'Blocked',
 sum(case when TC_Status In('Not Completed','Defferred','N/A') then 1 else 0 end) as 'Others'

From  TESTCYCL
Where
 TESTCYCL.TC_EXEC_DATE = CAST(CURRENT_TIMESTAMP AS DATE)
 And
 TESTCYCL.TC_ACTUAL_TESTER in ('Username1')
 Group by TC_ACTUAL_TESTER

查询 2:让测试人员提出缺陷

SELECT
 BG_DETECTED_BY,
 Sum(case when BG_Status Not in ('Closed','Defect Resolved','Rejected')then 1 else 0 end) as 'Defect Raised'
 FROM BUG
 Where BUG.BG_DETECTED_BY in ('username1')
 AND BUG.BG_DETECTION_DATE = CAST(CURRENT_TIMESTAMP AS DATE)
 Group by BG_DETECTED_BY

我试过inner join/Left Join,但是用户提出的缺陷计数不匹配

Query3:我试过了:

 Select
  TESTCYCL.TC_ACTUAL_TESTER as 'Tester',
  sum(case when TC_Status In('Blocked','Passed','Failed','Not Completed') then 1 else 0 end) as 'Total',
  sum(case when TC_Status = 'Passed' then 1 else 0 end) as 'Pass',
  sum(case when TC_Status = 'Failed' then 1 else 0 end) as 'Fail',
  sum(case when TC_Status = 'Blocked' then 1 else 0 end) as 'Blocked',
  sum(case when TC_Status In('Not Completed','Defferred','N/A') then 1 else 0 end) as 'Others',
  Sum(case when BG_Status Not in ('Closed','Defect Resolved','Rejected')then 1 else 0 end) as 'Defect Raised'

From  TESTCYCL 
Left Join BUG 
  on TESTCYCL.TC_ACTUAL_TESTER =  BUG.BG_DETECTED_BY 
 AND  BUG.BG_DETECTION_DATE = CAST(CURRENT_TIMESTAMP AS DATE)
Where TESTCYCL.TC_EXEC_DATE = CAST(CURRENT_TIMESTAMP AS DATE)
  And TESTCYCL.TC_ACTUAL_TESTER in ('username1')
Group by TC_ACTUAL_TESTER

输出如下:

Expected Output:
Tester   Total Execution  Passed  Failed  ... Defect Raised
  A          5              3       2             10

Actual Output:
Tester   Total Execution  Passed  Failed  ... Defect Raised
  A          56              3       2             45

【问题讨论】:

  • 我们需要每个查询的样本数据和结果。所以我们可以尝试达到您的预期输出。否则我们不知道从哪里开始
  • @JuanCarlosOropeza 感谢您的及时回复,但表架构太大而无法提供。我只能说,如果有人在 HP ALM 上工作过,那么他们将会有更好的理解。请查看架构 TESTCYCL 和 BUG Tables_Schema
  • 我理解,但您尝试创建一个 MVC,以便我们理解并进行测试。 How to create a Minimal, Complete, and Verifiable example 否则我们必须花费大量时间来破译你所拥有的。
  • 也不能太大。测试人员 A 有 5+3+2+10 行。您可以提供该数据。
  • 您希望拥有多个用户名吗?否则你应该使用TC_ACTUAL_TESTER = 'username1'

标签: mysql sql alm


【解决方案1】:

问题是您正在对积笛卡尔执行COUNT()。而不是连接结果。

现在你正在做

   COUNT(A*B) instead of COUNT(A) || COUNT(B)

一般示例,如果您有两个查询

SELECT * FROM A (ex: 10 rows)
SELECT * FROM B (ex: 10 rows)

你需要的是:

 SELECT temp1.*, temp2.*
 FROM (SELECT * FROM A) as temp1
 JOIN (SELECT * FROM B) as temp2
   ON temp1.ID = temp2.ID 

【讨论】:

  • 希望您可以创建一些模拟数据而不是一些通用问题。虽然这是一个通用的答案
  • 我会试试你上面的例子。并会尝试用表创建一个伪数据。请容忍我一会儿。谢谢
  • temp1.*.. 是.*还是别的什么
  • temp1 是第一个子查询的别名。所以 temp1.* 是该子查询中的所有字段。问题是什么?
  • 对不起,我认为这个问题不值得我花更多时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多