Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL组取决于case语句?_Sql_Database - Fatal编程技术网

SQL组取决于case语句?

SQL组取决于case语句?,sql,database,Sql,Database,在SQL中使用日期范围时,还需要对其进行分组。在本例中,我按周分组,但如果值小于10,我希望将其合并到一个“其他”行中 我如何按周分组,然后按周中的“其他人”分组?我只需要一行“其他”行,总共少于10行 选择总和(不同的SOTRAN.ACTQTY)作为值 案例 当总和(不相同的SOTRAN.ACTQTY)>10时 然后 '转换周'+(VARCHAR(10),dateadd(wk,datediff(wk,0,SOTRAN.tdate),0),1) 其他人 作为标签结束 从索特兰到索特兰 在哪里(

在SQL中使用日期范围时,还需要对其进行分组。在本例中,我按周分组,但如果值
小于10
,我希望将其合并到一个
“其他”行中

我如何按周分组,然后按周中的“其他人”
分组?我只需要一行
“其他”
行,总共少于
10行

选择总和(不同的SOTRAN.ACTQTY)作为值
案例
当总和(不相同的SOTRAN.ACTQTY)>10时
然后
'转换周'+(VARCHAR(10),dateadd(wk,datediff(wk,0,SOTRAN.tdate),0),1)
其他人
作为标签结束
从索特兰到索特兰
在哪里(
SOTRAN.tdate>=“2015年1月1日12:00:00上午”
和SOTRAN.tdate
选择SUM(不同的SOTRAN.ACTQTY)作为值,
当总和(不同的SOTRAN.ACTQTY)>10,然后“周数”+转换(VARCHAR(10),dateadd(wk,datediff(wk,0,SOTRAN.tdate),0),1)时,其他“其他”作为标签结束
从索特兰到索特兰
其中(SOTRAN.tdate>='1/1/2015 12:00:00 AM'和SOTRAN.tdate
选择总和(不同的SOTRAN.ACTQTY)作为值,
当总和(不同的SOTRAN.ACTQTY)>10,然后“周数”+转换(VARCHAR(10),dateadd(wk,datediff(wk,0,SOTRAN.tdate),0),1)时,其他“其他”作为标签结束
从索特兰到索特兰

其中(SOTRAN.tdate>='1/1/2015 12:00:00 AM'和SOTRAN.tdate您的整个案例陈述应在group by子句中(减去“AS标签”)

我以前没有共享过sqlfiddle,因此我希望这能起作用,但请在此处查看:

否则,请尝试以下方法:

select SUM(distinct SOTRAN.ACTQTY) AS value, 
       case when SUM(distinct SOTRAN.ACTQTY) > 10 then 
         'Week of ' + CONVERT(VARCHAR(10),dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0),1) else 
          'Others' end AS label
  from SOTRAN AS SOTRAN
 WHERE (SOTRAN.tdate>='1/1/2015 12:00:00 AM' 
   AND SOTRAN.tdate<='12/31/2015 11:59:59 PM' )  
 GROUP BY case when SUM(distinct SOTRAN.ACTQTY) > 10 then 
         'Week of ' + CONVERT(VARCHAR(10),dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0),1) else 
          'Others' end
选择总和(不同的SOTRAN.ACTQTY)作为值,
当总和(不同的SOTRAN.ACTQTY)>10时,则
'转换周'+转换(VARCHAR(10),dateadd(wk,datediff(wk,0,SOTRAN.tdate),0),1)其他
“其他”以标签结尾
从索特兰到索特兰
其中(SOTRAN.tdate>='1/1/2015 12:00:00 AM'
然后是10号
'转换周'+转换(VARCHAR(10),dateadd(wk,datediff(wk,0,SOTRAN.tdate),0),1)其他
"别人"的结局
更新:

select SUM(SOTRAN.ACTQTY) AS value, 
       case when SOTRAN.ACTQTY > 10 then 
         'Week of ' + CONVERT(VARCHAR(10),dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0),1) else 
          'Others' end AS label
  from SOTRAN AS SOTRAN
 WHERE (SOTRAN.tdate>='1/1/2015 12:00:00 AM' 
   AND SOTRAN.tdate<='12/31/2015 11:59:59 PM' )  
 GROUP BY case when SOTRAN.ACTQTY > 10 then 
         'Week of ' + CONVERT(VARCHAR(10),dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0),1) else 
          'Others' end;
选择总和(SOTRAN.ACTQTY)作为值,
当SOTRAN.ACTQTY>10时的情况,然后
'转换周'+转换(VARCHAR(10),dateadd(wk,datediff(wk,0,SOTRAN.tdate),0),1)其他
“其他”以标签结尾
从索特兰到索特兰
其中(SOTRAN.tdate>='1/1/2015 12:00:00 AM'
然后是10号
'转换周'+转换(VARCHAR(10),dateadd(wk,datediff(wk,0,SOTRAN.tdate),0),1)其他
"别人"的目的,;

您的整个案例陈述应该在group by子句中(减去“AS标签”)

我以前没有共享过sqlfiddle,因此我希望这能起作用,但请在此处查看:

否则,请尝试以下方法:

select SUM(distinct SOTRAN.ACTQTY) AS value, 
       case when SUM(distinct SOTRAN.ACTQTY) > 10 then 
         'Week of ' + CONVERT(VARCHAR(10),dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0),1) else 
          'Others' end AS label
  from SOTRAN AS SOTRAN
 WHERE (SOTRAN.tdate>='1/1/2015 12:00:00 AM' 
   AND SOTRAN.tdate<='12/31/2015 11:59:59 PM' )  
 GROUP BY case when SUM(distinct SOTRAN.ACTQTY) > 10 then 
         'Week of ' + CONVERT(VARCHAR(10),dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0),1) else 
          'Others' end
选择总和(不同的SOTRAN.ACTQTY)作为值,
当总和(不同的SOTRAN.ACTQTY)>10时,则
'转换周'+转换(VARCHAR(10),dateadd(wk,datediff(wk,0,SOTRAN.tdate),0),1)其他
“其他”以标签结尾
从索特兰到索特兰
其中(SOTRAN.tdate>='1/1/2015 12:00:00 AM'
然后是10号
'转换周'+转换(VARCHAR(10),dateadd(wk,datediff(wk,0,SOTRAN.tdate),0),1)其他
"别人"的结局
更新:

select SUM(SOTRAN.ACTQTY) AS value, 
       case when SOTRAN.ACTQTY > 10 then 
         'Week of ' + CONVERT(VARCHAR(10),dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0),1) else 
          'Others' end AS label
  from SOTRAN AS SOTRAN
 WHERE (SOTRAN.tdate>='1/1/2015 12:00:00 AM' 
   AND SOTRAN.tdate<='12/31/2015 11:59:59 PM' )  
 GROUP BY case when SOTRAN.ACTQTY > 10 then 
         'Week of ' + CONVERT(VARCHAR(10),dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0),1) else 
          'Others' end;
选择总和(SOTRAN.ACTQTY)作为值,
当SOTRAN.ACTQTY>10时的情况,然后
'转换周'+转换(VARCHAR(10),dateadd(wk,datediff(wk,0,SOTRAN.tdate),0),1)其他
“其他”以标签结尾
从索特兰到索特兰
其中(SOTRAN.tdate>='1/1/2015 12:00:00 AM'
然后是10号
'转换周'+转换(VARCHAR(10),dateadd(wk,datediff(wk,0,SOTRAN.tdate),0),1)其他
"别人"的目的,;

您只需编写
外部选择
即可获得所需内容

SELECT SUM(Value),label
FROM
    (
       SELECT SUM(DISTINCT SOTRAN.ACTQTY) AS value
           ,CASE 
             WHEN SUM(DISTINCT SOTRAN.ACTQTY) > 10
                   THEN  'Week of ' + CONVERT(VARCHAR(10), dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0), 1)
             ELSE 'Others'
            END AS label
       FROM SOTRAN AS SOTRAN
       WHERE (
               SOTRAN.tdate >= '1/1/2015 12:00:00 AM'
               AND SOTRAN.tdate <= '12/31/2015 11:59:59 PM'
            )
       GROUP BY 
             'Week of ' + CONVERT(VARCHAR(10), dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0), 1)
    ) as innerData
 GROUP BY label
然后只需使用select with
groupby

 SELECT SUM(Value),label
 FROM  innerData
 GROUP BY label

您只需编写
外部选择
,即可获得所需内容

SELECT SUM(Value),label
FROM
    (
       SELECT SUM(DISTINCT SOTRAN.ACTQTY) AS value
           ,CASE 
             WHEN SUM(DISTINCT SOTRAN.ACTQTY) > 10
                   THEN  'Week of ' + CONVERT(VARCHAR(10), dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0), 1)
             ELSE 'Others'
            END AS label
       FROM SOTRAN AS SOTRAN
       WHERE (
               SOTRAN.tdate >= '1/1/2015 12:00:00 AM'
               AND SOTRAN.tdate <= '12/31/2015 11:59:59 PM'
            )
       GROUP BY 
             'Week of ' + CONVERT(VARCHAR(10), dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0), 1)
    ) as innerData
 GROUP BY label
然后只需使用select with
groupby

 SELECT SUM(Value),label
 FROM  innerData
 GROUP BY label

您考虑过使用sqlfiddle吗?它将帮助我们调试您的问题您考虑过使用sqlfiddle吗?它将帮助我们调试您的问题必须在Group By中添加标签有意义:)好的捕获“标签”是无效的列名。只需在Group By中添加标签有意义:)好的catch'label'是无效的列名。无法在group by子句的group by列表所用的表达式中使用聚合或子查询。请从case语句中提取sum,并删除distinct,因为它们不执行任何操作。无法在group by子句的group by列表所用的表达式中使用聚合或子查询。获取从case语句中求和,并删除distinct,因为它们什么也不做。