0

SUM IF() を使用してクロス集計結果セットを実行するクエリがあります。このクエリでは、SUM IF() の値がハードコードされています。問題は、新しい値がデータベースに追加されることです。SUM IF() の値をハードコーディングせずにクエリを作成する方法はありますか? クエリは次のとおりです。

storeid を選択し、sum(if(marketsegmentid = 6, 1, 0)) as 6, sum(if(marketsegmentid = 7, 1, 0)) as 7, sum(if(marketsegmentid = 12, 1, 0)) as 12, sum( if(marketsegmentid = 17, 1, 0)) as 17, sum(if(marketsegmentid = 22, 1, 0)) as 22, sum(if(marketsegmentid = 27, 1, 0)) as 27, sum(if(marketsegmentid = 32 , 1, 0)) as 32, sum(if(marketsegmentid = 37, 1, 0)) as 37, sum(if(marketsegmentid = 42, 1, 0)) as 42, sum(if(marketsegmentid = 47, 1, 0) ) as 47, sum(if(marketsegmentid = 52, 1, 0)) as 52, sum(if(marketsegmentid = 97, 1, 0)) as 97, sum(if(marketsegmentid = 102, 1, 0)) as 102, sum( if(marketsegmentid = 107, 1, 0)) as107, sum(if(marketsegmentid = 112, 1, 0)) as 112, sum(if(marketsegmentid = 117, 1, 0)) as 117, sum(if(marketsegmentid = 122, 1, 0)) as 122, sum(if( marketsegmentid = 127, 1, 0)) as 127, sum(if(marketsegmentid = 132, 1, 0)) as 132, sum(if(marketsegmentid = 137, 1, 0)) as 137, sum(if(marketsegmentid = 142, 1 、0)) 142 storeid による storemarketsegments グループからのように。

クエリはレポートで使用され、結果は CSV にエクスポートされます。1 は結果セットのフラグとして使用されます。

クエリを実行しているテーブルは次のように設定されています。

CREATE TABLE storemarketsegments(id INT NOT NULL, marketsegmentid INT NOT NULL);

市場セグメントは別のテーブルに保持されます。

CREATE TABLE marketsegment(ID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), name VARCHAR(45), description VARCHAR(45));

どんな助けでも大歓迎です。値をハード コーディングせずにクエリを作成する方法があるかどうかはわかりません。また、新しい市場セグメントが追加されるたびにレポートのクエリを更新してもかまいませんが、確認することにしました。よろしくお願いいたします。

4

1 に答える 1

2

各カウントを個別の行として返し、必要に応じてアプリケーション層でフィルタリングできます。

select storeid, marketsegmentid, count(*) as Count
from storemarketsegments 
group by storeid, marketsegmentid;
于 2012-06-04T16:35:24.813 に答える