SQL Server 2008-将“结束”与“分组依据”一起使用时出错

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',

此查询在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', 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测试,似乎工作得很好。非常感谢。