2017-05-22 8 views
1

문제는 다음과 같습니다. 두 개의 테이블 하위 쿼리 (A와 B)가 있습니다. 나는 공식을 적용 할 필요가
a.Processed/b.Total * 100 행과 결과에 의해 행은 새 열 "활동 %" 두 테이블 하위 쿼리에서 행별로 동일한 작업 집합을 사용하십시오.

내가 다음 쿼리 시도에 표시 할 :

SELECT 
    (
     a.Processed/b.Total * 100 
    ) AS "Activity %" 
FROM 
    (
     SELECT 
      sla_date, 
      request_type, 
      CAST(
       SUM(sla_value) AS DECIMAL(
        10, 
        2 
       ) 
      ) AS Processed 
     FROM 
      table_schema.table_name 
     WHERE 
      team = '100' 
      AND sla_duration_hrs < 480 
     GROUP BY 
      sla_date, 
      request_type 
    ) AS A 
    JOIN(
     SELECT 
      sla_date, 
      request_type, 
      CAST(
       SUM(sla_value) AS DECIMAL(
        10, 
        2 
       ) 
      ) AS Total 
     FROM 
      table_schema.table_name 
     WHERE 
      team = '100' 
     GROUP BY 
      sla_date, 
      request_type 
    ) AS B 
     ON a.sla_date = b.sla_date 
    AND a.request_type = b.request_type 

하지만 나는이 모든 작업에 UNION을 사용할 수있는 오류를

"SQL Error [SE001]: Splice Engine exception: Problem invoking ISpliceVisitor visit method for class.splicemachine.db.impl.sql.compile.FromBaseTable"

을받을 수 있지만 실제 테이블 하위 쿼리 행의 수백 및 솔루션은 우아되는 시간 절약 거리가 멀다.

검색어를 다시 작성하는 방법에 대한 아이디어가 있으십니까?

감사합니다.

답변

0

기본적으로 '100'팀의 sla_value 총합에 비해 480보다 작은 sla_duration_hrs를 갖는 행에 대해 sla_value의 합계를 계산하려고합니다. 자기 조인이 필요합니다. 몇 가지 아이디어를 얻으려면 여기 http://www.1keydata.com/sql/sql-percent-to-total.html 예제를보십시오.

1

다음 다시 쓰기를 시도하고 오류 주위에 작동하는지 확인하십시오

SELECT 
    sla_date, 
    request_type, 
    CAST(SUM(case when sla_duration_hrs < 480 then sla_value else 0 end) 
     AS DECIMAL(10,2))/
    CAST(SUM(sla_value) AS DECIMAL(10,2)) AS "Activity %" 
FROM 
    table_schema.table_name 
WHERE 
    team = '100' 
GROUP BY 
    sla_date, 
    request_type; 
+0

간단하고 우아한 솔루션입니다. 고마워, 아만다! – DorinD