我有一个类似的查询
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