sql 表转置如何把表1,转成表2

SQL一维表转换成二维表
select B34005,
max(case B3034006 when '总行部门' then B3034007 else 0 end)
max(case B3034006 when '总行部门' then B3034008 else 0 end)
max(case B3034006 when '上海地区经营单位' then B3034007 else 0 end)
max(case B3034006 when '上海地区经营单位' then B3034008 else 0 end)
max(case B3034006 when '各地分行' then B3034007 else 0 end)
max(case B3034006 when '各地分行' then B3034008 else 0 end)
from B3034,(select MAX(B3034003) imax1 from B3034
where B.imax1 and B
GROUP BY B34003
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。求将表1转成表2的sql语句,2个表如下:_百度知道
求将表1转成表2的sql语句,2个表如下:
com/zhidao/wh%3D450%2C600/sign=c8db5d1bd01b0ef46cbd905ae8f47dec/77c6a7efce1b9df1deb48f8c5464da最好是oracle和mysql的两种语句.hiphotos.jpg" esrc="http.hiphotos
提问者采纳
then 分数 else 0 end) as 语文,
sum(case 课程=&quot,
sum(case 课程=&语文&quot,sum(case 课程=&数学& then 分数 else 0 end) as 物理from tab1物理& then 分数 else 0 end) as 数学
提问者评价
来自团队:
其他类似问题
1人觉得有用
为您推荐:
sql语句的相关知识
其他1条回答
楼上的应该是case when吧
其它的都差不多
也谢谢你的回答,辛苦了
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁[请教] mysql 从一张表更新另一张表, sql 语句如何效率最高? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
已注册用户请 &
Great Sites on MySQL
推荐管理工具
MySQL 相关项目
[请教] mysql 从一张表更新另一张表, sql 语句如何效率最高?
08:44:54 +08:00 · 1819 次点击
最近工作上遇到的问题,有条sql语句执行时间一直很长,情况如下:a表记录电话通话情况的表,b表记录的是电话通话失败的原因,两表之间通过一个叫sessionid的字段关联在一起。两表结构大致如下:a表:id, 主键,自增caller--&主叫号码callee --&被叫号码state
-&通话结果,成功=1,失败=2sessionid --&唯一标志一通电话的标记位fail_reason --&电话通话失败原因send_time --电话拨号的时间,unix时间戳b表:id --&主键,自增idreason
-&电话通话失败的原因sessionid --&唯一标志一通电话的标记位create_time --&记录创建时间a表记录大概50W条,b表记录大概20w条,且b表中存在sessionid重复的记录由于某些原因,电话失败原因不能通过a表关联b表查询得到,而要定期(30分钟或1个小时)从b表更新到a表中,这个更新语句该如何写效率最高?最初我的写法是这样:update a表 t set t.fail_reason
(SELECT t2.reason from
where t.sessionid = t2.sessionid
and t.status = 2
order by t2.create_time desc
)where t.status = 2 and UNIX_TIMESTAMP() -t.send_time & 3600 and (t.fail_reason = '' or t.fail_reason is null)-------------以上语句写成数据库事件,每隔半个小时执行一次,后期随着数据增大,感觉效率非常低,执行一次最少都几十分钟,后来百度google到另一种写法:update a表 t ,b表 t2set t.fail_reason=t2.reasonwhere t.sessionid=t2.sessionidand t.status=2and UNIX_TIMESTAMP() -t.send_time & 3600 and (t.fail_reason = '' or t.fail_reason is null)但还是很慢请问这类逻辑,mysql中sql语句有什么好的写法吗?还是我该去考虑增加索引,或者做数据拆分了?
8 回复 &| &直到
17:06:06 +08:00
& & 09:48:36 +08:00 via iPhone
先看执行计划再谈优化
& & 09:59:40 +08:00
先说几个优化的地方,既然a表中sessionid不会重复,就用sessionid作为主键。
a表status加索引,格式tinyint(1)或者enum(1,2)
a表sendtime加索引
a表failreason加索引
b表sessionid加索引
& & 10:01:28 +08:00
(t.fail_reason = '' or t.fail_reason is null)
空值统一用''或者null,要么'' 要么null,这样也能少一个判断快一点
& & 10:03:38 +08:00 via iPad
@ dml加索引不是更慢
& & 10:23:01 +08:00
看情况了。myisam引擎还可以。
其实你这样完全没必要update a表,join b表做个view就可以了
& & 11:14:19 +08:00
@ 非常感谢!因为这个些表使用有段时间了,而且其他程序也在用,所以不方便改查表为查view
关于索引的话,经常会被修改的字段是不是不适合加索引?a表的status和sendtime由于用户可能会重播,所以取值经常改动= =
& & 11:57:05 +08:00
两个表 sessionid 都做索引, a表 unique,b表 index。建一个中间表t3 俩字段, 主键 sessionid,还有reason
TRUNCATE TABLE
t3;
INSERT INTO t3 (SELECT sessionid, reason FROM (SELECT sessionid,reason FROM t2 ORDER BY create_time DESC) as t22 GROUP BY sessionid);
UPDATE t,t3 SET ... WHERE ...
这点数据量秒秒钟的事。
& & 17:06:06 +08:00
@ 照你的方法,确实几秒钟就搞定了,太感谢了:)
& · & 385 人在线 & 最高记录 1893 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.7.3 · 48ms · UTC 18:24 · PVG 02:24 · LAX 11:24 · JFK 14:24? Do have faith in what you're doing.}

我要回帖

更多关于 sql将表转换成xml 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信