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

时间:2014-12-23 16:28:14

标签: sql sybase

我对使用UNION在同一结果集中返回的同一个db表有两个单独的查询。我被困的地方是我现在想要在结果上运行GROUP BY而我没有成功。目前在每个UNION中都有分组(这很好!)由“name_of_asset”发生,但我在最终结果中为每个“name_of_asset”得到两行 - 每个内部选择一个。因此,虽然其余的查询都没问题,但下面的最终GROUP BY并没有完成我想要做的事情。事实上,我没有看到它对我的数据产生任何影响,我只是将它包含在下面,以突出我已经尝试过的内容。

请注意,我正在尝试使用临时表来完成以下

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

*在你发表评论之前请注意,对于帖子我更改了所有数据库,表格和列名,所以不,我实际上没有在db“my_db”中使用名为“my_table”的表...给我一些信用我的命名约定技能略微比那更好; p

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

1 个答案:

答案 0 :(得分:2)

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

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)

注意,因为你使用的是这个可以毫无问题地移出。 AVG将是一个问题,但你没有使用那个agragate。