我很抱歉提前发了很长的帖子。
背景:
我正在使用 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