2017-03-14 21 views
1

に算術式の参照を行う、私はネストされたSELECT内に配置されているエイリアスにエイリアスベースの算術演算を行う必要があります。このようなSQL - (ネストされたSELECTで計算)別名私のSQLクエリで

私のクエリを見て:

SELECT P.EMPLOYEE_NO, EE.BASIC_SALARY, 
    (SELECT SUM (NEW_ACTIVITY_VALUE) 
     FROM 
      (SELECT 
       (CASE WHEN P.ACTIVITY_TYPE = '0' THEN (P.ACTIVITY_VALUE * (-1)) 
        ELSE P.ACTIVITY_VALUE 
        END) AS NEW_ACTIVITY_VALUE 
       FROM V_EMPLOYEE_PAYACT P 
       WHERE P.ACTIVITY_TYPE IN ('0','1') AND P.EMPLOYEE_NO = '00002789' AND 
        ((YEAR = 2014 AND MONTH <= 4) 
        OR 
        (YEAR > 2013 AND YEAR <2014) 
        OR 
        (YEAR = 2013 AND MONTH >= 5)) 
        ) t 
     ) AS SUM_ACTIVITY_VALUE, 
    (SELECT NEW_BASIC_SALARY FROM 
      (SELECT (EE.BASIC_SALARY- SUM_ACTIVITY_VALUE) AS NEW_BASIC_SALARY 
       FROM EMPLOYEE_EMPLOYMENT EE 
       ) AS X 
FROM EMPLOYEE_EMPLOYMENT EE 
JOIN V_EMPLOYEE_PAYACT P 
ON EE.EMPLOYEE_ID = P.EMPLOYEE_ID 
WHERE P.EMPLOYEE_NO = '00002789' 
GROUP BY P.EMPLOYEE_NO, EE.BASIC_SALARY 

私が今持ってる唯一の問題は、この部分である:

..(SELECT NEW_BASIC_SALARY FROM 
      (SELECT (EE.BASIC_SALARY- SUM_ACTIVITY_VALUE) AS NEW_BASIC_SALARY 
       FROM EMPLOYEE_EMPLOYMENT EE 
       ) AS X... 

私は、クエリから上記の問題の一部を控除した場合、Iこのようになります。その結果得た:| S BASIC_SALARY | S SUM_ACTIVITY_VALUE |
EMP_NOをS
1234-SSS | 2009-s-s-s-s-s-s |形式:MP3ダウンロード100-s-s-s-s-s-s-s-s-s |

私があるように私の結果は見え必要なもの:
EMP_NO | S BASIC_SALARY |秒SUM_ACTIVITY_VALUE |秒NEW_BASIC_SALARY | S
1234-S-S-S | 2009-s-s-s-s-s-s |形式:MP3ダウンロード100-s-s-s-s-s-s-s-s-s-s- 1909-s-s-s-s-s-s |

P/S:私はちょっとテーブルをフォーマットする方法で失われた書式設定私の質問、のために非常に残念です。

+0

あなたの結果セットにとって重要なのは「ssss ....」ですか?もしそうなら、彼らはどこから来ますか? –

+0

@HartCO that -s-s-s-s ...私は質問を書くためにstackoverflowによって与えられた '高度なヘルプ'リンクから得ました。彼らは、 "| sで列を区切って表を作成します。表の2行目には、各列に少なくとも3つの-sが必要です。"私の結果は実際には '-s-s-s-s ... s'の部分がありません。完璧な – hotseetotsee

+0

ああ、私はケースだったかもしれない考え出し、私はどちらかここにテーブルをフォーマットする方法がわかりません。 –

答えて

1

クエリに他の脆弱性が存在する可能性がありますが、機能クエリで減算する値を取得している場合は、単純にその全体をサブクエリにして、エイリアス:

SELECT *,BASIC_SALARY - SUM_ACTIVITY_VALUE as NEW_BASIC_SALARY 
FROM (
SELECT P.EMPLOYEE_NO 
     , EE.BASIC_SALARY 
     ,(SELECT SUM (NEW_ACTIVITY_VALUE) 
     FROM (SELECT (CASE WHEN P.ACTIVITY_TYPE = '0' 
          THEN (P.ACTIVITY_VALUE * (-1)) 
          ELSE P.ACTIVITY_VALUE 
         END) AS NEW_ACTIVITY_VALUE 
       FROM V_EMPLOYEE_PAYACT P 
       WHERE P.ACTIVITY_TYPE IN ('0','1') 
       AND P.EMPLOYEE_NO = '00002789' 
       AND ((YEAR = 2014 AND MONTH <= 4) 
        OR (YEAR > 2013 AND YEAR <2014) 
        OR (YEAR = 2013 AND MONTH >= 5)) 
      ) t 
     ) AS SUM_ACTIVITY_VALUE 
FROM EMPLOYEE_EMPLOYMENT EE 
JOIN V_EMPLOYEE_PAYACT P 
ON EE.EMPLOYEE_ID = P.EMPLOYEE_ID 
WHERE P.EMPLOYEE_NO = '00002789' 
GROUP BY P.EMPLOYEE_NO, EE.BASIC_SALARY 
) sub 
+0

あなたのソリューションはチャームのように機能します!私はすでに私が望む結果を得ました。どうもありがとうございます! – hotseetotsee