我有一个有序的分组查询,怎么知道第一个字段是什么,它改变了以前的寄存器



我有一个类似的查询

SELECT FIELD_1, FIELD_2... FIELD_N, SUM(AMOUNT) 
FROM TABLE 
GROUP BY FIELD_1, FIELD_2... FIELD_N 
ORDER BY FIELD_1, FIELD_2... FIELD_N

当我处理查询结果时,有什么方法可以知道与前一个寄存器相比变化的第一个字段是什么吗?

我正在搜索一个类似GROUPING_ID的sql函数(它是Oracle数据库),但它只对GROUP BY ROLLUP查询有用,而且我不想要小计。

如果没有这样的功能,我必须编程手动搜索,我想尽量减少对结果集的访问。

我确信您可以使用分析函数来做您想做的事情。也许这就是你想要的?

SELECT FIELD_1, FIELD_2... FIELD_N, SUM(AMOUNT),
       (case when field_1 <> lag(field_1) over (order by FIELD_1, FIELD_2... FIELD_N) or
                  lag(field_1) over (order by FIELD_1, FIELD_2... FIELD_N) is null
             then 'field_1'
             when field_2 <> lag(field_2) over (order by FIELD_1, FIELD_2... FIELD_N)
             then 'field_2'
             . . .
             else 'field_n'
        end) as WhichGrouping
FROM TABLE
GROUP BY FIELD_1, FIELD_2... FIELD_N
ORDER BY FIELD_1, FIELD_2... FIELD_N

最新更新