2017-08-04 4 views
0

すでに計算された派生列の集計を新しい列に見つける方法があるかどうかを知りたい。いくつかの派生列のSUM合計を計算する

Employee_KT_State 
-------------------------------------------------------- 
Emp_Id  Team   KT_State   Left_Org 
---------------------------------------------------------- 
101  Orange   In Progress   2016 
102  Red   Complete    2016 
103  Orange   Complete    N 
104  Green   In Progress   N 
105  Orange   Not Started   N 
106  Green   Not Started   2015 
107  Red   In Progress   N 
108  Red   Complete    N 
109  Green   Complete    N 
----------------------------------------------------------- 

SELECT 
    SUM(if (KT_State = 'In Progress' AND Team = 'Red', 1, 0)) AS 'Red In Progress Count', 
    SUM(if (KT_State = 'In Progress' AND Team = 'Green', 1, 0)) AS 'Green In Progress Count', 
    SUM(if (KT_State = 'In Progress' AND Team = 'Orange', 1, 0)) AS 'Orange In Progress Count' 
    SUM(if (KT_State = 'Complete' AND Team = 'Green', 1, 0)) AS 'Green Complete Count' 
    FROM 
     Employee_KT_State 

Green In progressとComplete Countを追加しようとしています。異なるif条件を持つ別のSUMを持つ代わりに、2番目と4番目の列から派生したカウントを直接使用できますか?

something like - 

    SELECT 
    SUM(if (KT_State = 'In Progress' AND Team = 'Red', 1, 0)) AS 'Red In Progress Count', 
    SUM(if (KT_State = 'In Progress' AND Team = 'Green', 1, 0)) AS 'Green In Progress Count', 
    SUM(if (KT_State = 'In Progress' AND Team = 'Orange', 1, 0)) AS 'Orange In Progress Count' 
    SUM(if (KT_State = 'Complete' AND Team = 'Green', 1, 0)) AS 'Green Complete Count', 
    'Green In Progress Count' + 'Green Complete Count' AS ' Green In-Progress and Complete Count' --> Will this yield me results?? 
    FROM 
     Employee_KT_State 

助けてください。

+0

いいえ、あなたはそれが定義されている 'SELECT'に列の別名を使用することはできません。 –

+0

それでは、最初のクエリをサブクエリとして使用し、実際のクエリを使用して個々の列の合計を計算することをお勧めしますか? –

+0

いずれかの方法は良い – Strawberry

答えて

2

MySQLでは、あなたがにコードを簡素化することができます。

SELECT SUM(KT_State = 'In Progress' AND Team = 'Red') AS `Red In Progress Count`, 
     SUM(KT_State = 'In Progress' AND Team = 'Green') AS `Green In Progress Count`, 
     SUM(KT_State = 'In Progress' AND Team = 'Orange') AS `Orange In Progress Count`, 
     SUM(KT_State = 'Complete' AND Team = 'Green') AS `Green Complete Count`, 
FROM Employee_KT_State; 

があなたの二つの追加の列を取得するには、明示的SUM()表現を持っている必要があります。

列の別名にバッククォートを使用するように列名を変更しました。文字列と日付の定数には単一引用符を使用してください。

+0

応答ゴードンのおかげで。残念ながら、質問に記載されているように、グリーン・イン・プログレスとグリーン・コンプリートのカウントが必要です。 @SrinivasLakshman。 –

+0

。 。あなたはその計算を行う方法を知っているようです。ショートカットは使用できません。 –

0

使用サブクエリ

SELECT t.*, 
     `Green In Progress Count` + `Green Complete Count` 
      As ` Green In-Progress and Complete Count` 
FROM (
    SELECT 
    SUM(if (KT_State = 'In Progress' AND Team = 'Red', 1, 0)) AS `Red In Progress Count`, 
    SUM(if (KT_State = 'In Progress' AND Team = 'Green', 1, 0)) AS `'Green In Progress Count`, 
    SUM(if (KT_State = 'In Progress' AND Team = 'Orange', 1, 0)) AS `Orange In Progress Count` 
    SUM(if (KT_State = 'Complete' AND Team = 'Green', 1, 0)) AS `Green Complete Count` 
    FROM 
     Employee_KT_State 
) t 

簡素化デモは:http://sqlfiddle.com/#!9/b7ddd8c/2

SELECT t.*, 
     `Green In Progress Count` + `Green Complete Count` 
      As ` Green In-Progress and Complete Count` 
FROM (
    SELECT x As `Green In Progress Count`, 
      2* x As `Green Complete Count` 
    FROM Employee_KT_State 
) t 

| Green In Progress Count | Green Complete Count | Green In-Progress and Complete Count | 
|-------------------------|----------------------|--------------------------------------| 
|      1 |     2 |         3 | 
|      2 |     4 |         6 | 
|      3 |     6 |         9 | 
+0

ありがとうございます!私も同じことをやろう! –

関連する問題