2012-03-24 12 views
0

1日に条件(悪い、悪い、悪い)を数え、それを月にグループ化して次のように表示できるSQLがあります。レコードの表示ビューを変更して行に変更する方法

YEARS MONTHS LV COUNTVAL 
----- ------ ----- -------- 
2009 Apr Bad   5 
2009 Apr Poor   3 
2009 Apr Worse  2 
2009 Aug Bad   3 
2009 Aug Poor   2 
2009 Aug Worse  5 
2009 Dec Bad   5 
2009 Dec Poor   2 
2009 Dec Worse  3 
2009 Feb Bad   5 
2009 Feb Poor   3 
2009 Feb Worse  2 
2009 Jan Bad   3 
2009 Jan Poor   3 
2009 Jan Worse  4 
2009 Jul Bad   2 
2009 Jul Poor   3 
2009 Jul Worse  5 
2009 Jun Bad   1 
2009 Jun Poor   4 
2009 Jun Worse  5 
2009 Mar Bad   4 
2009 Mar Poor   4 
2009 Mar Worse  2 
2009 May Bad   3 
2009 May Poor   5 
2009 May Worse  2 
2009 Nov Bad   1 
2009 Nov Poor   5 
2009 Nov Worse  4 
2009 Oct Bad   5 
2009 Oct Poor   3 
2009 Oct Worse  2 
2009 Sep Bad   2 
2009 Sep Poor   4 
2009 Sep Worse  4 
2010 Apr Bad   6 
2010 Apr Poor   1 
2010 Apr Worse  3 
2010 Aug Bad   3 
2010 Aug Poor   2 
2010 Aug Worse  5 
2010 Dec Bad   4 
2010 Dec Poor   2 
2010 Dec Worse  4 
2010 Feb Bad   4 
2010 Feb Poor   3 
2010 Feb Worse  3 
2010 Jan Bad   6 
2010 Jan Poor   3 
2010 Jan Worse  1 
2010 Jul Bad   2 
2010 Jul Poor   4 
2010 Jul Worse  4 
2010 Jun Bad   4 
2010 Jun Poor   3 
2010 Jun Worse  3 
2010 Mar Bad   6 
2010 Mar Poor   1 
2010 Mar Worse  3 
2010 May Bad   4 
2010 May Worse  6 
2010 Nov Bad   5 
2010 Nov Poor   2 
2010 Nov Worse  3 
2010 Oct Bad   3 
2010 Oct Poor   3 
2010 Oct Worse  4 
2010 Sep Bad   3 
2010 Sep Poor   4 
2010 Sep Worse  3 

私が使用していますSQL:

select years, months, lv, countVal 
from 
(
select years, months, lv, count (lv) OVER (PARTITION BY years,months,lv) countVal from 

(
SELECT x.years, x.months, x.days, x.lv 
FROM airtest, 
XMLTABLE ('$d/cdata/name' passing xmldoc as "d" 
    COLUMNS 
    years integer path 'year', 
    months varchar(3) path 'month', 
    days varchar(2) path 'day', 
    lv varchar(5) path 'value' 
) as X 
    group by x.years, x.months, x.days, x.lv 
    order by x.years, x.months, x.days 
) 
) 
group by years, months, lv, countVal 
order by years,months 

今の問題は、この形式でなるためにそれを変更する方法です??

YEARS MONTHS Bad Poor  Worse 
----- ------ ----- -------- -------- 
2009 Apr  5  3  2 
2009 Aug  3  2  5 
2009 Dec  5  2  3 
......... 
......... 

修正後は、このようになります。

隔離されたデータが毎月の行にグループ化されていることがわかります。

ありがとうございました!

答えて

5

年/月単位で各列とグループへの条件付き合計:

SELECT years, months, 
     SUM(DECODE(lv, 'Bad', countval, 0)) Bad, 
     SUM(DECODE(lv, 'Poor', countval, 0)) Poor, 
     SUM(DECODE(lv, 'Worse', countval, 0)) Worse 
FROM (<your query>) 
GROUP BY years, months 

は[Gauravの曽爾は以下を追加]ご返信用

OR

WITH Base_Table AS 
(<your query>) 
SELECT years, months, 
     SUM(DECODE(lv, 'Bad', countval, 0)) Bad, 
     SUM(DECODE(lv, 'Poor', countval, 0)) Poor, 
     SUM(DECODE(lv, 'Worse', countval, 0)) Worse 
FROM base_Table 
GROUP BY years, months 
+0

おかげで、それうまくいかない。計算後の値が間違って大きくなります。 user1264222

+0

OK私はそれを取得します...このメソッドは、DECODE()の前にSUM()を削除して完全に動作します。どうもありがとう!!! – user1264222

+0

それは奇妙です。 SUM()とGROUP BYを使用しないと、1年ごとに(5,0,0; ​​0,3,0; 0,0,2)3つの行が1つずつ(5,3,2)ではなくなります。とにかく、あなたの問題が解決すれば、すべてが良いです:)。 – angus

関連する問題