3

問題を説明する言葉を見つけるのに苦労しているので、Googleは結果を出していません。(おそらく)非常に単純な質問でごめんなさい。

基本的に、2つの行が必要です。どちらも、ステートメント間の個別の行によって作成されます。Selectの場合と同じように「AS」ステートメントを使用しようとしましたが、構文エラーが発生します。

これが私のコードです:

Select      WEEK_ID,
            SUM (CUR_CHARGE_UNITS) as "Pro Units"
From        DW******.SLS****
Where       (WEEK_ID Between '201201' And '201252') --Use 'as' statement here?
            Or (WEEK_ID Between '201101' And '201152')
Group By    WEEK_ID

基本的に私は作り方を理解しようとしています

WEEK_ID Between '201201' And '201252'

「2012」というタイトルの1つの行に折りたたまれます。私が言ったように、私が試したのは

(WEEK_ID Between '201201' And '201252) As "2012"

何かご意見は?誰かが私に指摘したいチュートリアルはありますか?おそらく基本的な質問への答えを知らないことに対する侮辱はありますか?

4

3 に答える 3

6

代わりに、最初の4文字を取得し、それでグループ化してみてください。

Select      LEFT(WEEK_ID,4) AS Year,
            SUM (CUR_CHARGE_UNITS) as "Pro Units"
From        DW******.SLS****
Where       (WEEK_ID Between '201201' And '201252') --Use 'as' statement here?
            Or (WEEK_ID Between '201101' And '201152')
Group By    LEFT(WEEK_ID,4)

利点は、LEFTがANSIであるため、すべてのrdbmsで機能する必要があることです。

于 2013-01-09T17:00:08.307 に答える
2

ケースステートメントが必要なようです

http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2.doc.sqlref%2Fpsmcse.htm

select
    case when week_id between '201201' and '201252'
              then '2012'
          when week_id between '201101' and '201152'
              then '2011'
     end as 'year'
        SUM (CUR_CHARGE_UNITS) as "Pro Units"
From        DW******.SLS****
Where       (WEEK_ID Between '201201' And '201252')
        Or (WEEK_ID Between '201101' And '201152')
Group By 
     case when week_id between '201201' and '201252'
              then '2012'
          when week_id between '201101' and '201152'
              then '2011'
     end
于 2013-01-09T17:00:16.430 に答える
1

「任意の考え」という点では、GROUP BY 句と SQL 集計の概念を単純に学習することをお勧めします。

年のすべての週を集計する場合は、WEEK_ID で選択またはグループ化する必要はありません( yearでグループ化する必要があります)。

于 2013-01-09T17:03:05.590 に答える