2016-07-26 6 views
3

長いポストになることはお詫びさせていただきます。SQL - CASEを使用してSTRを変換した後のSUMを表す - INT

背景
私はレポートを作成するジャズ報告サービスと連携して作業項目のデータを格納するのRational Teamコンサート(RTC)を使用しています。レポートビルダツールを使用すると、独自のクエリを作成してデータをテーブルとしてプルすることができ、テーブルをグラフとして表す独自のインターフェイスがあります。

グラフ作成のオプションはあまりありません。合計を表示するように指定しないかぎり、チャートタイプのデフォルトはカウントになります。合計でグラフ化するには、データは文字列ではなく数値でなければなりません。デフォルトでは、SELECT文のすべての変数は文字列であるとみなされます。

私が使用するデータは、作業項目の束です。各作業項目はチーム(A、B)に関連付けられ、作業見積もり番号(count1、count2)を持ちます。

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

問題
作業推定をタグとして入力されるため、最初のステップは、COUNT1変換するためにSELECTを使用する場合WHENブロックCATCHを使用することであった - > 1、およびCOUNT2 - > 2(文字列タグを合計することができる実際の数に変換します)。これにより、型付きタグの代わりに数字1と2のテーブルが作成されました。

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

問題は、何らかの理由で、私は、SELECT文で宣言する任意の変数が常に表示されることを除いて、私は、数字としてSELECTステートメント内の変数を識別するためのツールを得ることを意味し、合計でグラフにしようとしていますということです(このツールには、現在の列のテーブル、つまりSELECT内の変数とその変数型として識別される変数があります)。

未遂ソリューション
私がした最初のクエリは、そのチーム名で、各作業項目のテーブルを返し、

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

が生じ

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 

を推定動作するようにしたが、ツールは引き続き数値を文字列として認識します。私は、明示的に整数にCASEをキャストしようとしたが、同じ問題に再びツールはまだ文字列として表し

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

を得ました。

現在の目標
ツールは、私が2行の表を返すようになり、今働くと考えている何等の根本的な問題、クエリとの互換性の問題、持っている場合、私は確認できないとして:の合計を各チームの仕事

問題を解決するには、サブクエリを使用してSUMを使用してデータを合計する方法があります。私が試してみると、 SUM(CASE WHEN ... END) AS TIME2 "列修飾子AVGとSUMは数値属性にのみ適用されます"というエラーが表示されます。これは、私はCASEの後に列を返すサブクエリを持つ必要があると思うし、それをSUMが、しかし、私は未知の海に航海していると動作するように構文を取得することはできません。

このような投稿は、製品ヘルプフォーラムの方が良いと私は理解しています。私は尋ねようとしましたが、助けを得ることはできません。私が2行/列テーブルを返すことを提案している解決策は、ソフトウェアが持つ可能性のある問題を回避する必要がありますが、ケースを使用するときにSUMのサブクエリを助ける必要があります。

私はあなたの時間と助けに感謝します!

EDIT 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 
+0

文字列の数をex1とすると、たとえばstring1から1が抽出されますか?と文字列は、常に同じパターンを持っている例:stringNNN? – scaisEdge

+0

私は、エラーがクエリの別の部分にあると思われます。 CASE式をキャストする方法はうまくいくはずです。問題を完全に再現するスクリプトを投稿できますか? –

+0

@TabAlleman完全なクエリを表示するために投稿を編集しました。私はまだこれが使用されているソフトウェアと関係があると思っています。私は、現在の目標の下で提案された解決策が問題を解決すると思いますが、ケースの後にSUMを実行する方法はわかりません。 – JakeTuero

答えて

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 
+0

ありがとうございました!これは完全に機能します。私はチームAとチームBを持つテーブルを得て、それぞれの合計を計算します(これらの数値が正しいことを確認するためにクロス検証されています)。残念ながら、フロントエンドのソフトウェアはまだ結果を文字列として検出しており、カウントによってグラフ化しているのでグラフ化しても、チームAの下には1が表示され、チームBの下には1が表示されます。それにもかかわらず、私は今問題の原因となっているフロントエンドを知っています。再度、感謝します! – JakeTuero

関連する問題