3

我很抱歉提前发了很长的帖子。

背景
我正在使用 Rational Team Concert (RTC),它与 ​​Jazz Reporting Service 一起存储工作项数据来创建报告。使用 Report Builder 工具,它允许您编写自己的查询以将数据提取为表格,并具有自己的界面以将表格表示为图形。

绘图的选择不多;图表类型默认为计数,除非您指定它显示总和。为了按总和绘制图表,数据必须是数字而不是字符串。默认情况下,报表生成器假定 SELECT 语句中的所有变量都是字符串。

我将使用的数据是一堆工作项。每个工作项都与一个团队 (A, B) 相关联,并具有一个工作估计编号 (count1, count2)。

Item # | Team | Work   |
------------------------
123    |  A   | count1 |
------------------------
124    |  A   | count2 |
------------------------
125    |  B   | count2 |
------------------------
....

问题
由于工作估计是作为标签输入的,第一步是在使用 SELECT 转换 count1 -> 1 和 count2 -> 2 时使用 CATCH WHEN 块(将字符串标签转换为可以求和的实际数字) . 这导致了一个带有数字 1 和 2 的表格代替了键入的标签(到目前为止很好)。

Item # | Team | Work   |
------------------------
123    |  A   |   1    |
------------------------
124    |  A   |   2    |
------------------------
125    |  B   |   2    |
------------------------
....

问题是我试图按 sum 绘制,这意味着让工具将 SELECT 语句中的变量识别为数字,除非出于某种原因,我在 SELECT 语句中声明的任何变量始终被视为字符串(该工具有当前列的表,即 SELECT 中的变量,以及工具标识为其变量类型的表)。

尝试的解决方案
我做的第一个查询是返回每个工作项的表及其团队名称和工作估算

SELECT T1.NAME,
       (CASE WHEN T1.TAGs='count1' THEN 1 ELSE 2 END) AS WORK
FROM RIDW.VW_REQUEST T1
WHERE T1.PROJECT_ID = 73

这导致

 Team | Work   |
----------------
 A    |   1    |
----------------
 A    |   2    |
----------------
 B    |   2    |
----------------
....

但该工具仍将数字视为字符串。然后我尝试将 CASE 显式转换为整数,但导致了同样的问题

...
CAST(CASE WHEN T1.TAGs='count1' THEN 1 ELSE 2 END AS Integer) AS WORK
...

该工具仍然表示为字符串。

当前目标
因为我无法确认该工具是否存在潜在问题、查询的兼容性问题等。我认为现在可行的是返回一个包含 2 行的表:每个团队的工作总和

       |Sum of 1's and 2's  |
-----------------------------
Team A |  SUM(1) + SUM(2)   |
-----------------------------
Team B |  SUM(1) + SUM(2)   |
-----------------------------

我遇到的问题是使用子查询来使用 SUM 对数据求和。当我尝试时, SUM(CASE WHEN ... END) AS TIME2我收到“列修饰符 AVG 和 SUM 仅适用于数字属性”的错误。这让我想到我需要有一个子查询,它返回 CASE 之后的列,然后求和,但我正在航行到未知的水域,似乎无法让语法正常工作。

我知道在产品帮助论坛上发布这样的帖子会更好。我试过四处打听,但没有得到任何帮助。我提出的返回 2 行/列表的解决方案应该绕过软件可能遇到的任何问题,但是在使用案例时我需要帮助子查询 SUM。

感谢您的时间和帮助!

编辑 1
以下是正确执行 CASE 的完整查询代码,但仍会导致工具解释类型:

SELECT  
   T1.Name,
   CAST(CASE WHEN T1.TAGS='|release_points_1|' THEN 1 ELSE (CASE WHEN T1.TAGS='|release_points_2|' THEN 2 ELSE 0 END) END AS Integer) AS TAG,
FROM RIDW.VW_REQUEST T1
WHERE T1.PROJECT_ID = 73 
AND
(T1.ISSOFTDELETED = 0) AND
(T1.REQUEST_ID <> -1 AND T1.REQUEST_ID IS NOT NULL
4

1 回答 1

1

对您当前查询的这个小调整应该有效:

SELECT  
   T1.Name,
   SUM(CAST(CASE WHEN T1.TAGS='|release_points_1|' THEN 1 ELSE (CASE WHEN T1.TAGS='|release_points_2|' THEN 2 ELSE 0 END) END AS Integer)) AS TAG,
FROM RIDW.VW_REQUEST T1
WHERE T1.PROJECT_ID = 73 
AND
(T1.ISSOFTDELETED = 0) AND
(T1.REQUEST_ID <> -1 AND T1.REQUEST_ID IS NOT NULL
GROUP BY T1.Name
于 2016-07-26T20:48:16.783 回答