SQL - 表示使用 CASE 转换 STR -> INT 后的 SUM
SQL - Representing SUM's after using CASE to transform STR -> INT
很抱歉,可能会提前post。
背景:
我正在使用 Rational Team Concert (RTC),它与 Jazz Reporting Service 一起存储工作项数据来创建报告。使用 Report Builder 工具,它允许您编写自己的查询以将数据提取为 table,并有自己的界面将 table 表示为图形。
绘图选项不多;图表类型默认为计数,除非您指定它显示总和。为了按总和绘制图形,数据必须是数字而不是字符串。默认情况下,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 块(字符串标签到实际数字,可以是总结)。这导致 table 用数字 1 和 2 代替键入的标签(到目前为止还不错)。
Item # | Team | Work |
------------------------
123 | A | 1 |
------------------------
124 | A | 2 |
------------------------
125 | B | 2 |
------------------------
....
问题是我正在尝试按总和绘制图形,这意味着让工具将 SELECT 语句中的变量识别为数字,但出于某种原因我在 [=70] 中声明的任何变量除外=] 语句始终被视为字符串(该工具具有当前列的 table,即 SELECT 中的变量,以及该工具将其标识为其变量类型)。
尝试的解决方案:
我做的第一个查询是 return 每个工作项的 table 及其团队名称和工作估计
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
...
工具仍然表示为字符串。
当前目标:
因为我无法确认该工具是否存在潜在问题,与查询的兼容性问题等。我认为现在可以使用的是 return a table with 2 rows:每个工作的总和团队
|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
我得到一个错误 "Column modifiers AVG and SUM apply only to number attributes"。这让我想到我需要一个子查询,其中 return 是 CASE 之后的列,然后对其求和,但我正在驶入未知的水域,似乎无法使语法正常工作。
我知道像这样的 post 在产品帮助论坛上会更好。我试着四处打听,但得不到任何帮助。我提出的 returning the 2 row/column table 的解决方案应该绕过软件可能存在的任何问题,但我需要帮助在使用案例时子查询 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
对您当前查询的这个小调整应该有效:
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
很抱歉,可能会提前post。
背景:
我正在使用 Rational Team Concert (RTC),它与 Jazz Reporting Service 一起存储工作项数据来创建报告。使用 Report Builder 工具,它允许您编写自己的查询以将数据提取为 table,并有自己的界面将 table 表示为图形。
绘图选项不多;图表类型默认为计数,除非您指定它显示总和。为了按总和绘制图形,数据必须是数字而不是字符串。默认情况下,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 块(字符串标签到实际数字,可以是总结)。这导致 table 用数字 1 和 2 代替键入的标签(到目前为止还不错)。
Item # | Team | Work |
------------------------
123 | A | 1 |
------------------------
124 | A | 2 |
------------------------
125 | B | 2 |
------------------------
....
问题是我正在尝试按总和绘制图形,这意味着让工具将 SELECT 语句中的变量识别为数字,但出于某种原因我在 [=70] 中声明的任何变量除外=] 语句始终被视为字符串(该工具具有当前列的 table,即 SELECT 中的变量,以及该工具将其标识为其变量类型)。
尝试的解决方案:
我做的第一个查询是 return 每个工作项的 table 及其团队名称和工作估计
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
...
工具仍然表示为字符串。
当前目标:
因为我无法确认该工具是否存在潜在问题,与查询的兼容性问题等。我认为现在可以使用的是 return a table with 2 rows:每个工作的总和团队
|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
我得到一个错误 "Column modifiers AVG and SUM apply only to number attributes"。这让我想到我需要一个子查询,其中 return 是 CASE 之后的列,然后对其求和,但我正在驶入未知的水域,似乎无法使语法正常工作。
我知道像这样的 post 在产品帮助论坛上会更好。我试着四处打听,但得不到任何帮助。我提出的 returning the 2 row/column table 的解决方案应该绕过软件可能存在的任何问题,但我需要帮助在使用案例时子查询 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
对您当前查询的这个小调整应该有效:
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