2016-07-26 18 views
3

긴 게시물 일 수있어서 유감입니다.SQL - CASE를 사용하여 SUM을 표현한 후 STR-> INT

배경 : 나는 보고서를 만들 재즈보고 서비스와 함께 작업 항목 데이터를 저장하여 Rational Team Concert의 (RTC)를 사용하고
. 보고서 작성 도구를 사용하면 자체 쿼리를 작성하여 데이터를 테이블로 가져올 수 있으며 테이블을 그래프로 나타 내기위한 자체 인터페이스가 있습니다.

그래프 작성 옵션이 많지 않습니다. 합계를 표시하도록 지정하지 않으면 차트 유형의 기본값이 카운트로 사용됩니다. 합계로 그래프를 그리려면 데이터가 문자열이 아닌 숫자 여야합니다. 기본적으로 보고서 작성기는 SELECT 문의 모든 변수가 문자열이라고 가정합니다.

내가 사용할 데이터는 많은 작업 항목입니다. 각 작업 항목은 팀 (A, B)과 연관되어 있으며 작업 추정 번호 (count1, count2)를가집니다.

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

문제는 : 워크 추정하는 태그로 입력되기 때문에, 첫 번째 단계는 COUNT1 변환 SELECT 사용시 WHEN 블록 캐치를 사용 하였다
-> 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 행/열 테이블 반환의 제안은 소프트웨어가있을 수있는 모든 문제를 우회해야하지만, 내가 하위 쿼리를 사용하여 케이스를 사용하여 도움이 필요합니다.

시간과 도움에 감사드립니다.

편집 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

예를 들어 string1에서 1의 숫자를 exctracting 찾고 계십니까? 문자열은 항상 같은 패턴을가집니다. 예 : 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로 표시됩니다 (각 숫자는 1로 계산되므로). 그럼에도 불구하고, 나는 그 문제를 일으키는 프론트 엔드를 알고있다. 다시 한 번 감사드립니다! – JakeTuero