SQL组取决于case语句?
在SQL中使用日期范围时,还需要对其进行分组。在本例中,我按周分组,但如果值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) 其他人 作为标签结束 从索特兰到索特兰 在哪里(
小于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 withgroupby
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 withgroupby
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,因为它们什么也不做。