2012-06-22 230 views
0

如下表SQL聚合函数

Month  Product Sales 
--------- ------- -----  
January   1  10 
January   2  15 
February  3  23 
March   1  15

我使用的查询是:

SELECT DISTINCT a.* FROM(-- possibly needed for where clause 
    SELECT dateadd(month, x.MonthOffset,0) AS mes, x.produto, Sum(x.quantidade) AS vendas 
    FROM 
    (
     SELECT DATEDIFF(month, 0, a.data) AS MonthOffset, a.produto, a.quantidade 
     FROM (
      SELECT l.*, fc.data FROM LINHAS AS l JOIN FacturaCli AS fc 
       ON fc.codigo = l.codigo 
       UNION ALL 
      SELECT l.*, ff.dataEmissão FROM LINHAS AS l JOIN FacturaForn AS ff 
       ON ff.codigo = l.codigo 
     ) AS a 
    ) AS x 
    GROUP BY MonthOffset, produto 
) AS a 

我想获得该产品,每月更多的销售。

我无法做查询要求,不能在“汇总群”的字段。 请注意,我提供的表是来自查询的结果。

我使用SQL Server 2008。我不能使用临时变量或over条款。 我不喜欢重复,导致我这个表的查询!但是,如果这是唯一的方式,那就没问题。

预期的结果:你的问题

Month  Product Sales 
--------- ------- -----  
January   2  15 
February  3  23 
March   1  15
+0

为什么你不能使用聚合函数?在这种情况下,这似乎是最明智的选择。 –

+0

我可以使用聚合函数。我的意思是,产品必须出现在结果和agregrate组仅一个月的查询,我需要 – brunoss

回答

1

一个非常棘手的解决方案。

SELECT a.* 
FROM mytable a 
     LEFT JOIN mytable b 
       ON a.Month = b.Month 
       AND a.Sales < b.Sales 
WHERE b.Month IS NULL 
+0

如果我不会喜欢reapeat使用的查询香港专业教育学院是什么?我不能使用临时变量(大学要求) – brunoss

+0

@ user1279792您正在使用哪个数据库和版本? –

+0

SQL Server 2008中不能使用过也 – brunoss