スプレッドシートのQuery関数の使い方について質問です。
違う条件のコード同士を1つの式に組み込み、商品の販売重量を年月ごとに集計したいのですが、上手くいきません。
(コードはGASのSetFormulaメソッドを使って書いています)
実現したいこと
販売した商品の重量を年月ごとに集計したいです。
具体的には、
① 全商品 (20g、80g、1kg全て) の販売重量
② 20gの販売重量
③ 80gの販売重量
④ 1kgの販売重量
を年月ごとに集計したいです。
(参照先のデータ一部抜粋↓)
(Query関数で出力したデータ↓)
上記の出力データは、先述「① 全商品の販売重量」の集計データです。
以下のコード (以降「コード1」と書きます) を使いました。
sheet.getRange(1, 1).setFormula(`=QUERY('発送管理表'!C:F,"select year(C), month(C)+1, sum(F) where C is not null group by year(C), month(C)+1 label year(C) '年', month(C)+1 '月', sum(F) '全商品の販売重量 (kg)'",2)`);
このコードに、さらに ②~④ 各商品の販売重量データを表示させるコードを組み込み、1つの式ですべてのデータを出力しようとしています。
イメージとしては、
・D列に20gの販売重量
・E列に80gの販売重量
・F列に1kgの販売重量
を出力し、各商品の集計結果が一目でわかるようにしたいです。
発生している問題・エラーメッセージ
以下がエラーメッセージの内容です。
関数 QUERY のパラメータ 2 のクエリ文字列を解析できません: PARSE_ERROR: Encountered " "where" "where "" at line 1, column 37. Was expecting one of: ")" ... "*" ... "+" ... "-" ... "/" ... "%" ...
試したこと
まず手始めに、年月ごとの20gの販売重量を表すコード (以降「コード2」と書きます) を別途用意しました。
(年月の表示は省いています)
sheet.getRange(1, 11).setFormula(`=QUERY('発送管理表'!C:F,"select sum(F) where D = '20g' group by year(C), month(C)+1 label sum(F) '20gの販売重量 (kg)'",2)`);
結果が以下の画像です。
このデータが、一番最初に掲載した画像のD列にも表示されるよう、コード1にコード2を組み込んで以下のようにしてみました。
sheet.getRange(1, 1).setFormula(`=QUERY('発送管理表'!C:F,"select year(C), month(C)+1, (sum(F) where C is not null group by year(C), month(C)+1),(sum(F) where D = '20g' group by year(C), month(C)+1) label year(C) '年', month(C)+1 '月', sum(F) '全商品の販売重量 (kg)', sum(F) '20gの販売重量 (kg)",2)`);
全商品の販売重量のコード、20gの販売重量のコードは条件が違うため、それぞれ () で括って入れ子のようにしています。
ですが、これではエラーが起きてしまいます。
Query関数では、それぞれ別条件のデータを1つの式で表すことはできないのでしょうか?
ご教示よろしくお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/18 10:16
退会済みユーザー
2022/07/18 10:32
2022/07/18 11:35