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 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有张表,需要每晚自动实现行转列。
具体情况如下图:
实现行转列。
每晚自动运行。
谢谢!
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 行转列的主要内容,如果未能解决你的问题,请参考以下文章