SQL Server 2008-将“结束”与“分组依据”一起使用时出错
此查询在SQL Server 2014()上运行正常,但我在2008版上遇到问题,抱怨“order附近的语法不正确”。我缺少什么SQL Server 2008-将“结束”与“分组依据”一起使用时出错,sql,sql-server-2008,Sql,Sql Server 2008,此查询在SQL Server 2014()上运行正常,但我在2008版上遇到问题,抱怨“order附近的语法不正确”。我缺少什么 CREATE TABLE t (id BIGINT, cliente VARCHAR(100), vendas FLOAT); INSERT INTO t VALUES (1, 'vitor', 234.3); INSERT INTO t VALUES (2, 'emerson', 456.2); INSERT INTO t VALUES (3, 'thiago',
CREATE TABLE t (id BIGINT, cliente VARCHAR(100), vendas FLOAT);
INSERT INTO t VALUES (1, 'vitor', 234.3);
INSERT INTO t VALUES (2, 'emerson', 456.2);
INSERT INTO t VALUES (3, 'thiago', 6789.3);
INSERT INTO t VALUES (4, 'john', 5423.0);
INSERT INTO t VALUES (5, 'fulano', 3467.8);
SELECT *, CASE WHEN vendas_agrupadas <= 0.7 THEN 'A' ELSE
(CASE WHEN vendas_agrupadas <= 0.9 THEN 'B' ELSE 'C' END) END
AS "Grupo ABC" FROM (
SELECT *, SUM(vendas) OVER (ORDER BY vendas desc)
/(SUM(vendas) OVER()) AS vendas_agrupadas FROM t) asdf;
创建表t(id BIGINT、cliente VARCHAR(100)、vendas FLOAT);
插入t值(1,'vitor',234.3);
插入t值(2,'艾默生',456.2);
插入t值(3,'thiago',6789.3);
插入t值(4,'john',5423.0);
插入t值(5,'fulano',3467.8);
当vendas_agrupadasSQL Server 2008不直接支持累计总和时,选择*,以CASE为例。以下带有子查询的版本应满足您的要求:
SELECT *,
(CASE WHEN vendas_agrupadas <= 0.7 THEN 'A'
WHEN vendas_agrupadas <= 0.9 THEN 'B'
ELSE 'C'
END) as "Grupo ABC"
FROM (SELECT *,
(SELECT SUM(vendas)
FROM t t2
WHERE t2.vendas >= t.vendas
) / (SUM(vendas) OVER()) AS vendas_agrupadas
FROM t
) asdf;
选择*,
(当vendas_agrupadas将数据添加到SQL Fiddler中时,使用起来非常简单-谢谢!@CindyH很遗憾,它没有SQL Server 2008版本,但是该站点也使用vendas的重复值进行了greatI测试,似乎工作得很好。非常感谢。