sql 行转列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 行转列相关的知识,希望对你有一定的参考价值。

从数据库中查询:Select Count(*) as a ,Case when C_Posit is Null then '未知'
when C_Posit='' then '输入为空' else C_Posit end as b
From X1 Left Outer Join X2 On X1.id=X2.id Group by C_Posit 得出a,b两列:
a b
2 未知
4 输入为空
4 cc
现在需要这种效果:
未知 输入为空 cc
2 4 4
0.2 0.4 0.4 -----------(表示所占比例)
这个怎么转化?我做过一些都没有转化成功

SELECT DISTINCT
(SELECT a FROM tab WHERE b = \'未知\'),
(SELECT a FROM tab WHERE b = \'输入为空\'),
(SELECT a FROM tab WHERE b = \'cc\')
FROM tab
UNION ALL
SELECT
cast((SELECT a FROM tab WHERE b = \'未知\') / t.sumA AS DECIMAL(3, 1)),
(SELECT a FROM tab WHERE b = \'输入为空\') / t.sumA,
(SELECT a FROM tab WHERE b = \'cc\') / t.sumA
FROM (SELECT SUM(a) AS sumA FROM tab) t

这里cast((SELECT a FROM tab WHERE b = \'未知\') / t.sumA AS DECIMAL(3, 1)), 不同SQL方言转化方式不一样,目的是为了转换成小数
参考技术A 应该是这样写 参考技术B 说了多次了,行转列的问题直接用存储过程,不用做不了。

SQLSERVER有张表,需要每晚自动实现行转列。

具体情况如下图:

实现行转列。
每晚自动运行。
谢谢!

create procedure p_rowtocolumn
as

select erpno,max(sum(BCBH1)) as BCBH
from tb
union all
select erpno ,max(sum(BCBH2)) as BCBH
from tb
......
参考技术A 写一个存储过程,然后建立一个任务去调度呀(要开SQL的Agent服务)

以上是关于sql 行转列的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 动态行转列(参数化表名分组列行转列字段字段值)

mysql行转列转换

oracle行转列sql怎么写?

SQLSERVER有张表,需要每晚自动实现行转列。

MySQL行转列与列转行

ORAClE sql如何实现行转列?