光标?环?汇总行数据以及行结果

时间:2014-06-19 15:39:49

标签: sql loops cursor sybase

我有下表&数据

表名= 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。

由于

1 个答案:

答案 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;