我有一个数据表,请参阅使用透视表语句,我可以按标题分解计数
select * from (
select * from ta
)
pivot (
COUNT(title)
for title in ( 'worker', 'manager') )
结果是这样的:
STATUS 'worker' 'manager'
started 3 1
finished 4 5
ready 3 4
我需要为行总计添加第三列
STATUS 'worker' 'manager' Total
started 3 1 4
finished 4 5 9
ready 3 4 7
你知道我如何在同一个声明中实现这一点吗?演示位于http://sqlfiddle.com/#!4/740fd/1
5条答案
按热度按时间kpbpu0081#
我只会使用条件聚合而不是
pivot
。这为您提供了所需的额外灵活性:Demo on DB Fiddle:
vyswwuz22#
使用SUM()分析函数获得总数,然后使用PIVOT
tzxcd3kk3#
为整个查询给予一个别名(例如
q
),以便用星号(q.*
)限定所有列,然后将所有列相加,以产生total
列:Demo
moiiocjp4#
我认为其他的例子要简单得多,但这里是一个在旋转之前使用
cube
和grouping
的不同方法:输出:
http://sqlfiddle.com/#!4/740fd/13/0
将
cube
添加到group by子句中将给予该列的小计。默认情况下,它将在该列中显示为null。您可以在select子句中使用grouping
函数来区分总计行和普通行(总计行为1
,普通行为0
)。使用解码将强制这些总行为'total'
,这将成为您可以透视的值之一。sr4lhrrt5#
这将为访问此页面的任何人解决您的问题:
备注:
1.您可以使用额外的外部查询来解决此问题
1.通过对Pivot子句中的列使用别名,可以轻松地调用外部查询中的列
1.在外部查询中使用coalesce可为manager和worker列返回0而不是null。这确保了即使worker或manager列具有空值,total列也总是有要添加的内容。