我有下表&数据
表名= MyTable
Description | Partition | Total
------------|---------------|--------------
CASH | Reconciled | 25
CASH | Adjustm | 50
CASH | Balanc | 120
LOANS | Adjustm | 44
LOANS | Balanc | 32
CARDS | Adjustm | 81
CARDS | Balanc | 67
MTG | Adjustm | 14
MTG | Balanc | 92
要求很简单 - 它是从表中直接选择的,但对于每个唯一的描述,我需要总结所有分区的总数,以便用户看到
Description | Partition | Total
------------|---------------|--------------
CASH | TOTAL | 195 <
CASH | Reconciled | 25
CASH | Adjustm | 50
CASH | Balanc | 120
LOANS | TOTAL | 76 <
LOANS | Adjustm | 44
LOANS | Balanc | 32
CARDS | TOTAL | 148 <
CARDS | Adjustm | 81
CARDS | Balanc | 67
MTG | TOTAL | 106 <
MTG | Adjustm | 14
MTG | Balanc | 92
这是一个存储过程我写作 - 我没有选择将其拉入MT来执行此操作所以我需要在存储过程的主体中执行它。我是在寻找一些Loop或Cursor来提供我需要的卷起,还是有另外一个明显而简单的解决方案,我只是没有看到?除了卷起之外,它还是一个直接的
select * from MyTable
数据库是Sybase。
由于
答案 0 :(得分:1)
您可以使用GROUP BY
子句的GROUPING SETS扩展名来执行此操作:
SELECT Description,
COALESCE(Parition, 'Total') AS Partition,
SUM(Total) AS Total
FROM MyTable
GROUP BY GROUPING SETS ((Description, Partition), (Description));
或者您可以使用:
SELECT Description,
COALESCE(Parition, 'Total') AS Partition,
SUM(Total) AS Total
FROM MyTable
GROUP BY ROLLUP (Description, Partition);
如果没有ROLLUP,您可以使用UNION ALL
:
SELECT Description,
Parition,
Total
FROM MyTable
UNION ALL
SELECT Description,
'Total' AS Partition,
SUM(Total) AS Total
FROM MyTable
GROUP BY Description;