CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

纵向行记录,横向显示,进来看看......

楼主pans(土豆)2001-11-26 14:39:03 在 MS-SQL Server / 基础类 提问

现在遇到一个问题:  
   
  表1表示结构:      
                项目ID,项目名称  
                001           基本工资  
                002           高温补贴                  
                003           ...  
                 
  表2表示值:  
                人员ID,项目ID,值  
                1001         001         1000.00  
                1001         002         200.00  
                1001         003         ...  
   
                1002         001         1200.00  
                1002         002           200.00  
                ...   ...  
   
  现在要显示为以下格式:  
                人员ID,基本工资       高温补贴   ...   ...  
                1001         1000.00       200.00     ...  
                1002         1200.00       200.00     ...  
                ...   ...  
   
  我把它称之为纵向设计,横向展现。使用这样的设计是为了可以动态增加项目,但在展现给用户看时,就比较困难,不知各位可否给点建议?  
     
   
  问题点数:72、回复次数:21Top

1 楼dbcontrols(泰山__抛砖引玉)回复于 2001-11-26 15:08:56 得分 0

把数据写到EXCEL  
   
  欢迎访问http://go8.163.com/dbcontrolsTop

2 楼pans(土豆)回复于 2001-11-26 16:17:07 得分 0

用   Cross-tab可以显示出来,但让用户在何种状态下编辑,是个问题。用Excel,用户非急不可!Top

3 楼mycode(不写代码)回复于 2001-11-26 16:46:56 得分 0

不要用SQL语句来解决.而在采用其他编程语言,构造查询语句来进行显示.  
  我觉得单纯用SQL语句可能不能解决.  
  Top

4 楼IronPromises(铁诺)回复于 2001-11-26 16:55:05 得分 0

可以做到.但比较的繁琐.  
  我是不想写.  
  Top

5 楼yaojl(探讨探讨)回复于 2001-11-26 16:56:59 得分 0

不是很难,如果是oracle的话Top

6 楼icevi(按钮工厂)回复于 2001-11-26 17:10:57 得分 7

什么数据库?不同的数据库解决办法不一样。  
   
  以前很多这样的贴子。最好查一下。Top

7 楼argin(猫眉毛)回复于 2001-11-26 17:33:32 得分 0

自己写一个存储过程不就得了  
  不要老是想着偷懒!Top

8 楼pans(土豆)回复于 2001-11-26 17:36:40 得分 0

谢谢各位的回答!  
  To   mycode:  
        我考虑过,有两种方式,其一是后台构建临时表(显示方式)。其二是前台编码生成显示格式。如果,前台写代码的话,大数据量时,会很难受的。而且还要自己写数据更新代码,工程浩大。后台方式,没想出来。  
   
  To   IronPromises(铁诺) :  
  给个提示,好不好?  
   
  To   yaojl(探讨探讨) :  
          这于后台数据库关系很大吗?   如果,是Oracle,如何处理?  
   
  To   icevi(按钮工厂)(女) :  
          我有查,不过没有找到。Top

9 楼argin(猫眉毛)回复于 2001-11-26 19:24:51 得分 40

这个无非是个交叉表,用存储过程解决!  
  我以前解答过了!  
  请参见:  
  http://www.csdn.net/expert/topic/328/328512.shtm  
  只不过列表头稍微自己修改一下!Top

10 楼argin(猫眉毛)回复于 2001-11-26 19:33:22 得分 5

这是个很通用的存储过程!(只不过你要认真看一下,读懂它)Top

11 楼yaojl(探讨探讨)回复于 2001-11-26 21:20:33 得分 5

以前开发的时候经常这样干,在oracle里好象有数据转至的函数;查查手册!Top

12 楼pans(土豆)回复于 2001-11-27 10:38:37 得分 0

To   argin(猫眉毛):  
        你的存储过程的确很好用。在下佩服,佩服,俺看明白了。谢谢你的帮助,先来30分。  
   
  再问一下,这种设计时,我们如何让用户编辑数据呢?我们不管是用crystal   rep的交叉报表,还是象“猫眉毛”兄写存储过程,呈现在用户眼前的,都是不可编辑的。  
   
  如果象工资单,有20多项工资项目,在横向方式编辑是他们的习惯。如果把50人的记录,按纵向方向呈现在用户眼前(在一页上),让他编辑数据,俺担心有命跟他说,没命回呀。  
   
  各位,再给俺一点提示。这个帖子,我再加分,一定。  
  Top

13 楼pans(土豆)回复于 2001-11-27 10:42:07 得分 0

To   argin(猫眉毛):  
        不好意思,俺不知道,不能分开给分。结帖是再加好了。Top

14 楼liu7537(数据库模型设计博客连载(http://blog.csdn.net/liu7537))回复于 2001-11-27 14:31:47 得分 5

别忘了ORACLE中最有力的武器“DECODE()”!  
  有了它,你的那个要求就迎刃而解了。Top

15 楼xinpingf(白开心)回复于 2001-11-27 15:14:12 得分 10

视图:  
      create   or   replace   view   v_gz   as    
        select   人员id,    
                      sum(decode(项目id,‘001’,值))   基本工资   ,  
                      sum(decode(项目id,‘002’,值))   高温补贴   ,  
                        ...  
            from   table2    
          group   by   人员id;  
  一切ok  
                      Top

16 楼pans(土豆)回复于 2001-11-27 16:58:21 得分 0

谢谢各位,数据显示是没有问题了。  
  现在的问题是,用户在何种形式下编辑数据?如我上面所说Top

17 楼liujianjun_(流星尔)回复于 2001-11-27 17:13:08 得分 0

to   白开心:  
        你这个视图写法是在oracle里的是吗Top

18 楼blackfiles(一个和尚挑水喝)回复于 2001-11-28 10:33:29 得分 0

看看Top

19 楼pans(土豆)回复于 2001-11-28 11:56:51 得分 0

如果要用户在横向显示的方式下编辑数据,看样子,只能在前台写代码,自己更新。  
  如,在DataSet中,判断某一行是否被修改,如果被修改,根据人员ID,列名写Update更新回去。  
  这种方法,应该可行吧!Top

20 楼argin(猫眉毛)回复于 2001-11-29 17:08:46 得分 0

返回的记录集是不可更新的!  
   
  前台程序处理:  
  将数据显示在GRID中  
  cell(row,col)的内容变了时  
  根据行和列,修改数据库后  
  在显示到GRID中!  
  (注意NULL的情况)  
  Top

21 楼pans(土豆)回复于 2001-11-30 09:05:24 得分 0

我知,我知,谢谢提醒。  
  在有些编程工具里,可以自己写每一行的更新方法(如在事件中写代码)。  
  Top

相关问题

  • 如何把纵向的数据 横向显示????
  • 如何让datalist的内容横向显示,不是常规的纵向显示?
  • 我想把数据先横向显示,然后再纵向如下;
  • ★★★在用表格显示数据库中取出的记录时,在内容过长的情况下,如何让表格纵向增高,而不是横向的变长★★★
  • 如何把记录横向显示为字段?
  • 如何实现数据窗口中的行以横向显示列名则在左侧纵向显示?
  • 怎样把一个数据表中的数据有纵向显示成横向,详见内容
  • 【问】如何检测ListBox是否显示了滚动条?(包括横向与纵向的)
  • 纵向菜单如何改横向?
  • 请教,如何在Pivot Table中将原先默认Data Fields纵向显示用VB代码更改为横向显示。

关键词

  • 数据
  • 存储过程
  • 用户
  • 语句
  • 项目
  • 代码
  • 数据库
  • 修改
  • 解决
  • oracle

得分解答快速导航

  • 帖主:pans
  • icevi
  • argin
  • argin
  • yaojl
  • liu7537
  • xinpingf

相关链接

  • SQL Server类图书

广告也精彩

反馈

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