入力テーブル CREATE table INTBL1 ( TENCD CHAR(3) NOT NULL, SHMKCD CHAR(2) NOT NULL, UCWKCD CHAR(4) NOT NULL, STIDATE DATE NOT NULL, RYUCD CHAR(1) NOT NULL, KGK INTEGER , KBN CHAR (1), PRIMARY KEY (TENCD, SHMKCD, UCWKCD, STIDATE, RYUCD, KGK) ); 出力テーブル CREATE table OUTTBL1 ( SHMKCD CHAR(2) NOT NULL, UCWKCD CHAR(4) NOT NULL, STIDATE DATE NOT NULL, RYUCD CHAR(1) NOT NULL, GKIKNS1 INTEGER, GKIKGK1 INTEGER , GKIKNS2 INTEGER, GKIKGK2 INTEGER , KBN CHAR (1), PRIMARY KEY (SHMKCD, UCWKCD,STIDATE) ); 文 SELECT SHMKCD, UCWKCD, STIDATE, RYUCD, CASE WHEN RYUCD = '1' THEN COUNT(STIDATE) ELSE 0 END, CASE WHEN RYUCD = '1' THEN SUM(KGK) ELSE 0 END, CASE WHEN RYUCD = '0' THEN COUNT(STIDATE) ELSE 0 END, CASE WHEN RYUCD = '0' THEN SUM(KGK) ELSE 0 END, CASE WHEN COUNT(KBN = '1') > 0 THEN '1' ELSE '0' END FROM INTBL1 GROUP BY SHMKCD, UCWKCD, STIDATE ; エラー SQL : 列"intbl1.ryucd"はGROUP BY句で出現しなければならないか、集約関数内で使用しなければなりません ```参照元のテーブル 店コード 種目コード 内訳コード 指定日 理由コード 金額 区分 出力先のテーブル 店コード 種目コード 内訳コード 指定日 件数_1 合計金額_1 件数_2 合計金額_2 区分 これを種目コード、内訳コード、指定日でgroup byして件数をカウントし、金額を合計したいです そこは普通に指定日でcountとか金額をsumすればいいと思うのですが、 入れる先のテーブルの列を理由コードによって変えたいんです 理由コードが1なら件数_1と合計金額_1に、それ以外なら件数_2と合計金額_2に入れたいです。 また、集約したレコードの中に区分が1のものが1つでも含まれていたら、入れる先のテーブルの区分を1にしたいんです case when うんたらー then '1' else '0' end とかselect文に書いてたら区分と理由コードはgroup by句で出現しなければならないか、集約関数内で使用しなければなりませんと怒られました。 実際のテーブルは今さわれるところにないので、今てきとうに作りました。間違いがあるかもしれませんがとりあえずはこれでお願いします。 dbはpostgresqlです
回答4件
あなたの回答
tips
プレビュー