如何在Sybase sql子查询的结果上正确使用GROUP BY

如何在Sybase sql子查询的结果上正确使用GROUP BY,sql,sybase,Sql,Sybase,我对同一个db表有两个单独的查询,我使用UNION在同一个结果集中返回该表。我陷入困境的地方是,我现在也希望根据结果运行一个小组,但我没有成功。目前,在每个联合中都有“资产的名称”分组(这很好!),但在最终结果中,每个“资产的名称”有两行,每个内部选择一行。因此,虽然查询的其余部分还可以,但下面的最后一个groupby并没有完成我要做的事情。事实上,我不认为它对我的数据有任何影响,我只是把它放在下面,以突出我已经尝试过的内容 请注意,我正在尝试在不使用临时表的情况下完成以下 SELECT TOP

我对同一个db表有两个单独的查询,我使用UNION在同一个结果集中返回该表。我陷入困境的地方是,我现在也希望根据结果运行一个小组,但我没有成功。目前,在每个联合中都有“资产的名称”分组(这很好!),但在最终结果中,每个“资产的名称”有两行,每个内部选择一行。因此,虽然查询的其余部分还可以,但下面的最后一个groupby并没有完成我要做的事情。事实上,我不认为它对我的数据有任何影响,我只是把它放在下面,以突出我已经尝试过的内容

请注意,我正在尝试在不使用临时表的情况下完成以下

SELECT TOP 4 asset, name_of_asset, usd_today, usd_prev
FROM
(
SELECT 'Asset' asset, name_of_asset, SUM(usd)/1000 usd_today, 0 usd_prev
FROM my_db..my_table
WHERE the_date = '9/30/2014' 
AND asset = 'A'

UNION ALL

SELECT 'Asset' asset, name_of_asset, 0 usd_today, SUM(usd)/1000 usd_prev
FROM my_db..my_table
WHERE the_date = '8/29/2014' 
AND asset = 'A'
) x

GROUP BY x.name_of_asset
ORDER BY x.usd_notional DESC
*在你发表评论之前,请注意,在这篇文章中,我更改了所有的数据库、表和列名,所以不,我实际上没有在数据库“my_db”中使用名为“my_table”的表……请相信我,我的命名约定技巧比这稍微好一点;p


提前感谢您的帮助!这是我发布的第一个问题。。。编辑和建设性的批评总是受欢迎的:)

不要在工会声明中分组。像这样:

SELECT TOP 4 asset, name_of_asset, SUM(usd_today)/1000 usd_today,SUM(usd_prev)/1000 usd_prev
FROM
(
  SELECT 'Asset' asset, name_of_asset, usd usd_today, 0 usd_prev
  FROM my_db..my_table
  WHERE the_date = '9/30/2014' 
  AND asset = 'A'

UNION ALL

  SELECT 'Asset' asset, name_of_asset, 0 usd_today, usd usd_prev
  FROM my_db..my_table
  WHERE the_date = '8/29/2014' 
  AND asset = 'A'
) x
GROUP BY (x.name_of_asset)

注意,因为您使用的是sum,所以可以毫无问题地将其移出。AVG将是一个问题,但您没有使用该agragate。

除了子查询中的GROUP BY是多余的(但无害的)之外,您发布的SQL有什么不起作用?我觉得很好。建议从子查询中删除TOP表达式,以使外部TOP更可预测。因此SQL正在“工作”,即没有失败,因此从这个意义上讲,它很好,但它不会返回我希望的结果。当我希望按资产的名称进行分组时,每个资产的名称会返回多(两)行,因此每个资产的不同名称会在结果集中有一行。谢谢你的其他建议,我正在编辑以反映这一点:)这些建议与下面的答案相结合是我所需要的。谢谢@Pieter:)不使用内部GROUP BY语句,在外部SELECT中使用SUM,这正是我所需要的,同时去掉了内部TOP 2。谢谢你的帮助。啊,是的。。。前2名。。。我没看到。他们应该出去。