如何解决“无法对包含聚合或子查询的表达式执行聚合功能。”

时间:2019-01-31 10:49:26

标签: sql sql-server

我试图计算表中的行数,并将结果输出到列中。计算特定数据中给定的行数,然后将结果显示在列中。有人可以帮我吗?感谢您的帮助。

下面是我的代码:

SELECT DISTINCT BOM.STYLE_ID,
                BOM.SEASON_ID,
                BOM.Ad_compo_desc,
                BOM.CONTENT_CLASS,
                COUNT(CASE
                          WHEN BOM.CONTENT_CLASS = 'ART'
                               AND BOM.Ad_compo_desc LIKE '%emb%' THEN
                                 (SELECT COUNT(BOM.Ad_compo_desc))
                      END) AS EMBRO,
                COUNT(CASE
                          WHEN BOM.CONTENT_CLASS = 'ART'
                               AND BOM.Ad_compo_desc LIKE '%print%' THEN
                                 (SELECT COUNT(BOM.Ad_compo_desc))
                      END) AS PRINTING
FROM IPLEXSTY_AD_BOM_DTL BOM
WHERE CONTENT_CLASS = 'ART' --AND BOM.Ad_compo_desc IS NOT NULL
GROUP BY BOM.STYLE_ID,
         BOM.SEASON_ID,
         BOM.CONTENT_CLASS,
         BOM.Ad_compo_desc,
         BOM.CONTENT_CLASS

这给了我一个错误:

  

无法对包含以下内容的表达式执行聚合函数   聚合或子查询

2 个答案:

答案 0 :(得分:0)

您要在

下面写点什么吗?
logger

在您的查询中,我发现您使用了$('#searchfield').quicksearch('.views-column .views-field-field-soktaggar', { 'delay': 100, 'selector': 'div.searchtags', 'loader': 'span.loading', 'noResults': '#noresults', 'bind': 'keyup', 'show': function () { $(this).parent('.views-column').removeClass('hide'); $(this).parent('.views-column').addClass('show'); }, 'hide': function () { $(this).parent('.views-column').removeClass('show'); $(this).parent('.views-column').addClass('hide'); }, 'prepareQuery': function (val) { // turn query into array in order to allow sorting var q = String(val).match(/("[^"]+"|[^"\s]+)/g); // sort the tags in the query in the same order as in the reference array var reference_array = [ 'ir', 'lowtemp', 'hightemp', 'logger', 'tek', 'tet', 'tes', 'tej', 'pt100', 'ntc', 'livs', 'fastighet' ]; if(q != null){ var result = q.sort(function(a, b) { return reference_array.indexOf(a) - reference_array.indexOf(b); }); var str = result.join(' '); } return new RegExp(str, "i"); }, 'testQuery': function (query, txt, _row) { // remove tags in txt that are not used in query if(txt != ''){ // only process items with tags // turn txt (tags from items) into array var t = String(txt).match(/("[^"]+"|[^"\s]+)/g); // remove leading '/' and trailing '/i' in query var str = String(query).replace(/^\/|\/i$/g, ''); // turn query into array var q = String(str).match(/("[^"]+"|[^"\s]+)/g); // only show matching tags in txt, otherwise matching is not always possible var res = t.filter(element => q.includes(element)); //turn tags array into string var _txt = res.join(' '); // use this alternative tag string from items return query.test(_txt); } return query.test(txt); } }); ,这是不必要的,因为  您使用聚合函数。而您在else子句中尝试的内容不清楚

答案 1 :(得分:0)

我相信您想要这样的东西:

SELECT BOM.STYLE_ID, BOM.SEASON_ID,
       SUM(CASE WHEN BOM.Ad_compo_desc LIKE '%emb%' THEN 1 ELSE 0 END) AS EMBRO,
       SUM(CASE WHEN BOM.Ad_compo_desc LIKE '%print%' THEN 1 ELSE 0 END) AS PRINTING
FROM IPLEXSTY_AD_BOM_DTL BOM
WHERE CONTENT_CLASS = 'ART' --AND BOM.Ad_compo_desc IS NOT NULL
GROUP BY BOM.STYLE_ID, BOM.SEASON_ID;

请注意,SELECTGROUP BY都删除了不必要的列。同样,WHERE子句过滤掉'ART'以外的行; CASE中不需要过滤。