SQL-表示使用CASE转换STR->INT后的总和
我很抱歉,这可能是一个很长的职位提前 背景: 我正在使用RationalTeamConcert RTC,它与JazzReporting服务一起存储工作项数据来创建报告。使用报表生成器工具,它允许您编写自己的查询以将数据作为表来提取,并具有自己的界面以图形的形式表示表 没有太多的图形选择;图表类型默认为计数,除非您将其指定为显示总和。为了按总和绘制图形,数据必须是数字而不是字符串。默认情况下,报表生成器假定SELECT语句中的所有变量都是字符串 我将使用的数据是一组工作项。每个工作项都与团队a、B关联,并具有工作估算编号count1、count2SQL-表示使用CASE转换STR->INT后的总和,sql,rtc,ibm-jazz,Sql,Rtc,Ibm Jazz,我很抱歉,这可能是一个很长的职位提前 背景: 我正在使用RationalTeamConcert RTC,它与JazzReporting服务一起存储工作项数据来创建报告。使用报表生成器工具,它允许您编写自己的查询以将数据作为表来提取,并具有自己的界面以图形的形式表示表 没有太多的图形选择;图表类型默认为计数,除非您将其指定为显示总和。为了按总和绘制图形,数据必须是数字而不是字符串。默认情况下,报表生成器假定SELECT语句中的所有变量都是字符串 我将使用的数据是一组工作项。每个工作项都与团队a、B
Item # | Team | Work |
------------------------
123 | A | count1 |
------------------------
124 | A | count2 |
------------------------
125 | B | count2 |
------------------------
....
问题:
由于工时估算是作为标记输入的,所以第一步是在使用SELECT将count1->1和count2->2字符串标记转换为可求和的实际数字时使用CATCH WHEN块。这就产生了一个表,其中数字1和2取代了迄今为止键入的标记good
Item # | Team | Work |
------------------------
123 | A | 1 |
------------------------
124 | A | 2 |
------------------------
125 | B | 2 |
------------------------
....
问题是,我试图通过求和来绘制图形,这意味着让工具将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 |
----------------
....
但该工具仍将数字视为字符串。然后我尝试显式地将案例转换为整数,但结果是相同的问题
...
CAST(CASE WHEN T1.TAGs='count1' THEN 1 ELSE 2 END AS Integer) AS WORK
...
同样,该工具仍然表示为字符串
当前目标:
因为我无法确认该工具是否存在潜在问题、与查询的兼容性问题等。我认为现在可以使用的是返回一个包含两行的表:每个团队的工作总和
|Sum of 1's and 2's |
-----------------------------
Team A | SUM(1) + SUM(2) |
-----------------------------
Team B | SUM(1) + SUM(2) |
-----------------------------
我遇到的问题是使用子查询来对数据进行求和。当我尝试
如果。。。结束为TIME2我得到一个错误,列修饰符AVG和SUM只应用于数字属性。这让我想到,我需要一个子查询,它返回案例后的列,然后求和,但我正在驶入未知水域,似乎无法使用语法
我知道在产品帮助论坛上发表这样的帖子会更好。我试着四处打听,但找不到任何帮助。我建议的返回2行/列表的解决方案应该绕过软件可能存在的任何问题,但我需要在使用案例时查询总和的帮助
我感谢你的时间和帮助
编辑1:
下面是完整的查询代码,该代码正确地执行了案例,但仍然会导致工具解释的类型:
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
您正在寻找从string1中删除字符串eg 1的编号?字符串总是有相同的模式,例如:stringNNN?我怀疑错误在查询的不同部分。您铸造CASE表达式的方式应该有效。你能发布一个完全重现这个问题的脚本吗?@TabAlleman我已经编辑了这个帖子来显示完整的查询。我仍然怀疑这与正在使用的软件有关,并且我认为我在当前目标下提出的解决方案可以解决问题,我只是不确定在案例之后如何执行求和。当您在SSMS中单独执行此查询时,是否会出错?或者错误只发生在前端软件中?在当前目标表中,显示SUM1和SUM2;这是表示任意数量的SUMN结果,还是表示数量很少?如果是后者,您可以通过在查询中获取TEAM A/SUM1来解决它;团队A/SUM2在工作表中,并执行内部联接以获取工作表数据。然后它们将作为单独的列出现;把这些加在一起会得到总数。谢谢!!!这很好用。我得到了一个表,其中有团队a和团队B,以及我交叉验证的每个团队的总数,以确保这些数字是正确的。不幸的是,前端软件仍然将结果检测为字符串,并且在绘图时,因为它是按计数绘图,所以在团队A下仅显示1,在团队B下仅显示1,因为它将每个数字计数为1。尽管如此,我现在知道是前端导致了这个问题。再次感谢!