我有一个使用SUM IF()来执行交叉表结果集的查询。在这个查询中,我有值sin和SUM IF()硬编码。问题是新值被添加到数据库中。有没有办法编写查询而无需对SUM IF()中的值进行硬编码?这是查询:
选择storeid,sum(if(marketsegmentid = 6,1,0))为
6
, 总和(如果(marketsegmentid = 7,1,0)) 作为7
,sum(if(marketsegmentid = 12,1,0))为12
,sum(if(marketsegmentid = 17,1,0))为17
, sum(if(marketsegmentid = 22,1,0))为22
,sum(if(marketsegmentid = 27,1,0))为27
, sum(if(marketsegmentid = 32,1,0))为32
,sum(if(marketsegmentid = 37,1,0))为37
, sum(if(marketsegmentid = 42,1,0))为42
,sum(if(marketsegmentid = 47,1,0))为47
, sum(if(marketsegmentid = 52,1,0))为52
,sum(if(marketsegmentid = 97,1,0))为97
, sum(if(marketsegmentid = 102,1,0))为102
,sum(if(marketsegmentid = 107,1,0))为107
, sum(if(marketsegmentid = 112,1,0))为112
,sum(if(marketsegmentid = 117,1,0))为117
, sum(if(marketsegmentid = 122,1,0))为122
,sum(if(marketsegmentid = 127,1,0))为127
, sum(if(marketsegmentid = 132,1,0))为132
,sum(if(marketsegmentid = 137,1,0))为137
, sum(if(marketsegmentid = 142,1,0))为142
来自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),名称VARCHAR(45),description VARCHAR(45));
非常感谢任何帮助。我不确定是否有办法编写查询而不对硬编码值,我不介意在添加新的市场分段时更新报告中的查询,但我想我会检查。提前感谢您的帮助。
答案 0 :(得分:2)
您可以将每个计数作为单独的行返回,然后根据需要在应用程序层中进行过滤:
select storeid, marketsegmentid, count(*) as Count
from storemarketsegments
group by storeid, marketsegmentid;