CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  开发

更新表SQL语句

楼主studiovc()2005-12-03 21:06:13 在 Oracle / 开发 提问

各位大哥:  
  有问题如下:  
  有表X:  
  KEY         A           B             C             D                 E           F           G             H         I           J     ...........  
  ----------------------------------------------------------------------------------------  
  K1       人数         30         金额       3000       手续费     700                               提成     1000  
  K2       数量         100       单价       50                                       税金       700  
  .  
  .  
  .  
  .  
   
   
   
  用一条SQL语句实现,将KEY为k1的一行转换到表Y中  
  表Y:  
    A               B  
  ----------------------------  
  人数         30  
  金额         3000  
  手续费     700  
  提成         1000  
   
  或将KEY为K2的一行转换为:  
   
  表Y:  
  A                   B  
  ----------------------------------  
  数量         100  
  单价         50  
  税金         700  
   
   
  谢谢!! 问题点数:20、回复次数:14Top

1 楼leborety(那只螃蟹)回复于 2005-12-04 01:02:20 得分 0

这表建的。。。  
   
   
  帮你顶好了Top

2 楼hfyang9095(嘿嘿哈)回复于 2005-12-04 10:56:48 得分 0

update   y  
  set   (人数,金额,手续费,提成)=  
    (select   a,b   from   X   where   Key=k1    
      union   all   select   c,d   from   X   where   Key=k1    
      union   all   select   e,f   from   X   where   Key=k1    
      union   all   select   g,h   from   X   where   Key=k1     )Top

3 楼studiovc()回复于 2005-12-04 12:40:41 得分 0

楼上,  
  人数,金额,手续费,提成   不是属性名呵  
  而是某一行的内容提要Top

4 楼studiovc()回复于 2005-12-04 12:47:46 得分 0

X表中这样的记录每天有2000行呢!而且每行都在本行内进行一个相当复杂的计算,比而D=B*I-G-J   ,等等,并且每一行的计算方法基本不相同,或者讲第一行都有一个唯一的计算公式,所以只能建成这样的一个表,大家讨论一下,还有什么更好的办法???  
  Top

5 楼hevin(没有什么是不可能的)回复于 2005-12-04 13:48:19 得分 0

Insert   all    
      into   Y(A,B)   values   (A,B)  
      into   Y(A,B)   values   (C,D)  
      into   Y(A,B)   values   (E,F)  
      into   Y(A,B)   values   (G,H)  
      ........  
  select   KEY,A,B,C,D,E,F,G,H     ........  
      from   x  
  where   KEY='K1';Top

6 楼studiovc()回复于 2005-12-04 19:14:20 得分 0

hevin:  
   
  谢谢,  
  还有一个问题:   X表中的A,B,C,D,E,F,G,H.....  
  有的列可能是空值,对这些列,我不想Insert   到Y表中,是否执行完你的方法后,再来一个DELETE,还是有更好的办法,一次完成.Top

7 楼hevin(没有什么是不可能的)回复于 2005-12-04 21:50:41 得分 0

好像没有这样的语法,至少我不知道。Top

8 楼hevin(没有什么是不可能的)回复于 2005-12-06 23:25:23 得分 13

今天刚看到一个新的语法,呵呵:  
   
  Insert   all    
    when   not   A   is   null   and   not   B   is   null   then  
      into   Y(A,B)   values   (A,B)  
    when   not   C   is   null   and   not   D   is   null   then  
      into   Y(A,B)   values   (C,D)  
    when   not   E   is   null   and   not   F   is   null   then  
      into   Y(A,B)   values   (E,F)  
    when   not   G   is   null   and   not   H   is   null   then  
      into   Y(A,B)   values   (G,H)  
      ........  
  select   KEY,A,B,C,D,E,F,G,H     ........  
      from   x  
  where   KEY='K1';  
  Top

9 楼heyixiang(子豚の愛人)回复于 2005-12-07 08:55:55 得分 0

顶楼上的Top

10 楼kkcy(空空耳)回复于 2005-12-08 21:22:31 得分 0

楼上的新语法没大看懂,仅仅判断了A、B不为null,要是c或d为null呢?Top

11 楼yufeiyxl(与飞)回复于 2005-12-09 08:30:06 得分 0

hevin(没有什么是不可能的)   兄弟很厉害,这些语法偶第一次看到,谢谢你让我长见识Top

12 楼xiaoxin1981115(编程浪子)回复于 2005-12-10 11:10:11 得分 0

markTop

13 楼QWERT520(痛苦并快乐着)回复于 2005-12-10 16:19:12 得分 7

[Q]如何实现行列转换  
  [A]1、固定列数的行列转换  
  如  
  student   subject   grade  
  ---------------------------  
  student1   语文   80  
  student1   数学   70  
  student1   英语   60  
  student2   语文   90  
  student2   数学   80  
  student2   英语   100  
  ……  
  转换为  
  语文   数学   英语  
  student1   80   70   60  
  student2   90   80   100  
  ……  
  语句如下:  
  select   student,sum(decode(subject,'语文',   grade,null))   "语文",  
  sum(decode(subject,'数学',   grade,null))   "数学",  
  sum(decode(subject,'英语',   grade,null))   "英语"  
  from   table  
  group   by   student  
   
  2、不定列行列转换  
  如  
  c1   c2  
  --------------  
  1   我  
  1   是  
  1   谁  
  2   知  
  2   道  
  3   不  
  ……  
  转换为  
  1   我是谁  
  2   知道  
  3   不  
  这一类型的转换必须借助于PL/SQL来完成,这里给一个例子  
  CREATE   OR   REPLACE   FUNCTION   get_c2(tmp_c1   NUMBER)  
  RETURN   VARCHAR2  
  IS  
  Col_c2   VARCHAR2(4000);  
  BEGIN  
  FOR   cur   IN   (SELECT   c2   FROM   t   WHERE   c1=tmp_c1)   LOOP  
  Col_c2   :=   Col_c2||cur.c2;  
  END   LOOP;  
  Col_c2   :=   rtrim(Col_c2,1);  
  RETURN   Col_c2;  
  END;  
  /  
  SQL>   select   distinct   c1   ,get_c2(c1)   cc2   from   table;即可  
   
  Top

14 楼studiovc()回复于 2005-12-12 10:29:37 得分 0

谢谢各位!Top

相关问题

  • 求一个更新表的sql语句
  • 多表相对更新的问题。求一sql语句更新
  • 求一更新SQL语句
  • SQL 语句更新问题!~~~
  • sql语句更新问题
  • 为什么我用SQL语句更新库表不能成功?
  • 两个关联表的更新的SQL语句问题?
  • 写SQL语句更新表字段的问题。
  • Table表如何更新记录,不用SQL语句
  • 求更新表内记录的sql语句写法

关键词

  • 语句
  • 转换
  • 数学
  • 语法
  • sql
  • null
  • student
  • 提成
  • 语文
  • 表

得分解答快速导航

  • 帖主:studiovc
  • hevin
  • QWERT520

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo