首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • datagrid导用sql数据?
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • timmyfeng66
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-04-21 22:41:41 楼主
    sql表如下:
    categoryid    categoryname  categoryintro
    1                恋人          对象1
    2                朋友          对象2
    3                父母          对象3
    4                病人          对象1
    5                老师          对象2
    6                客户          对象3

    实现datagrid功能如下:

    对象1    对象2      对象3
    恋人      朋友        父母
    病人      老师        客户

    sql语句应该如何查找才对?谢谢!
    80  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • changjiangzhibin
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-21 23:06:521楼 得分:0
    /*
    普通行列转换
    (爱新觉罗.毓华 2007-11-18于海南三亚)

    假设有张学生成绩表(tb)如下:
    Name Subject Result
    张三 语文  74
    张三 数学  83
    张三 物理  93
    李四 语文  74
    李四 数学  84
    李四 物理  94
    */

    -------------------------------------------------------------------------
    /*
    想变成
    姓名        语文        数学        物理         
    ---------- ----------- ----------- -----------
    李四        74          84          94
    张三        74          83          93
    */

    create table tb
    (
      Name    varchar(10) ,
      Subject varchar(10) ,
      Result  int
    )

    insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)
    insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)
    insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)
    insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)
    insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)
    insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)
    go

    --静态SQL,指subject只有语文、数学、物理这三门课程。
    select name 姓名,
      max(case subject when '语文' then result else 0 end) 语文,
      max(case subject when '数学' then result else 0 end) 数学,
      max(case subject when '物理' then result else 0 end) 物理
    from tb
    group by name
    /*
    姓名        语文        数学        物理         
    ---------- ----------- ----------- -----------
    李四        74          84          94
    张三        74          83          93
    */

    --动态SQL,指subject不止语文、数学、物理这三门课程。
    declare @sql varchar(8000)
    set @sql = 'select Name as ' + '姓名'
    select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
    from (select distinct Subject from tb) as a
    set @sql = @sql + ' from tb group by name'
    exec(@sql)
    /*
    姓名        数学        物理        语文         
    ---------- ----------- ----------- -----------
    李四        84          94          74
    张三        83          93          74
    */

    -------------------------------------------------------------------
    /*加个平均分,总分
    姓名        语文        数学        物理        平均分                总分         
    ---------- ----------- ----------- ----------- -------------------- -----------
    李四        74          84          94          84.00                252
    张三        74          83          93          83.33                250
    */

    --静态SQL,指subject只有语文、数学、物理这三门课程。
    select name 姓名,
      max(case subject when '语文' then result else 0 end) 语文,
      max(case subject when '数学' then result else 0 end) 数学,
      max(case subject when '物理' then result else 0 end) 物理,
      cast(avg(result*1.0) as decimal(18,2)) 平均分,
      sum(result) 总分
    from tb
    group by name
    /*
    姓名        语文        数学        物理        平均分                总分         
    ---------- ----------- ----------- ----------- -------------------- -----------
    李四        74          84          94          84.00                252
    张三        74          83          93          83.33                250
    */

    --动态SQL,指subject不止语文、数学、物理这三门课程。
    declare @sql1 varchar(8000)
    set @sql1 = 'select Name as ' + '姓名'
    select @sql1 = @sql1 + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
    from (select distinct Subject from tb) as a
    set @sql1 = @sql1 + ' , cast(avg(result*1.0) as decimal(18,2)) 平均分,sum(result) 总分 from tb group by name'
    exec(@sql1)
    /*
    姓名        数学        物理        语文        平均分                总分         
    ---------- ----------- ----------- ----------- -------------------- -----------
    李四        84          94          74          84.00                252
    张三        83          93          74          83.33                250
    */

    drop table tb   

    ---------------------------------------------------------
    ---------------------------------------------------------
    /*
    如果上述两表互相换一下:即

    姓名 语文 数学 物理
    张三 74  83  93
    李四 74  84  94

    想变成
    Name      Subject Result     
    ---------- ------- -----------
    李四        语文      74
    李四        数学      84
    李四        物理      94
    张三        语文      74
    张三        数学      83
    张三        物理      93
    */

    create table tb1
    (
      姓名 varchar(10) ,
      语文 int ,
      数学 int ,
      物理 int
    )

    insert into tb1(姓名 , 语文 , 数学 , 物理) values('张三',74,83,93)
    insert into tb1(姓名 , 语文 , 数学 , 物理) values('李四',74,84,94)

    select * from
    (
      select 姓名 as Name , Subject = '语文' , Result = 语文 from tb1
      union all
      select 姓名 as Name , Subject = '数学' , Result = 数学 from tb1
      union all
      select 姓名 as Name , Subject = '物理' , Result = 物理 from tb1
    ) t
    order by name , case Subject when '语文' then 1 when '数学' then 2 when '物理' then 3 when '总分' then 4 end

    --------------------------------------------------------------------
    /*加个平均分,总分
    Name      Subject    Result             
    ---------- -------    --------------------
    李四        语文      74.00
    李四        数学      84.00
    李四        物理      94.00
    李四        平均分    84.00
    李四        总分      252.00
    张三        语文      74.00
    张三        数学      83.00
    张三        物理      93.00
    张三        平均分    83.33
    张三        总分      250.00
    */

    select * from
    (
      select 姓名 as Name , Subject = '语文' , Result = 语文 from tb1
      union all
      select 姓名 as Name , Subject = '数学' , Result = 数学 from tb1
      union all
      select 姓名 as Name , Subject = '物理' , Result = 物理 from tb1
      union all
      select 姓名 as Name , Subject = '平均分' , Result = cast((语文 + 数学 + 物理)*1.0/3 as decimal(18,2)) from tb1
      union all
      select 姓名 as Name , Subject = '总分' , Result = 语文 + 数学 + 物理 from tb1
    ) t
    order by name , case Subject when '语文' then 1 when '数学' then 2 when '物理' then 3 when '平均分' then 4 when '总分' then 5 end

    drop table tb1
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • timmyfeng66
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-21 23:15:372楼 得分:0
    那在asp.net 应该如何查找才对呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qituoshi
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-21 23:27:563楼 得分:0
    编程/JAVA/.NET/C++  群号:38850938
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • changjiangzhibin
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-22 00:30:424楼 得分:0
    SQL code
    --有空字段,暂未解决 select categoryid, max(case categoryintro when '对象1' then categoryname else null end) 对象1, max(case categoryintro when '对象2' then categoryname else null end) 对象2, max(case categoryintro when '对象3' then categoryname else null end) 对象3 from t group by categoryid
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • changjiangzhibin
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-22 00:49:065楼 得分:0
    算了,SQL有点累,LZ把它读出来后用集合处理吧,很好弄
    C# code
    //假设分别存放到三个集合中,可视情况再作处理(合并起来加个分隔符等) ArrayList arr1 = new ArrayList(); ArrayList arr2 = new ArrayList(); ArrayList arr3 = new ArrayList(); DateTable dt = ReturnTable();//读出的记录集 foreach(DataRow dr in dt.Rows) { string col1 = dr["对象1"].ToString(); stirng col2 = dr["对象2"].ToString(); stirng col2 = dr["对象3"].ToString(); if(col1.Length > 0) arr1.Add(col1); //对象1的有效值集合 if(col2.Length > 0) arr2.Add(col1); //对象2的有效值集合 if(col3.Length > 0) arr3.Add(col1); //对象3的有效值集合 }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • changjiangzhibin
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-22 00:50:116楼 得分:0
    呵,后面的col1要相应的改一下,复制的没改全
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • timmyfeng66
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-24 20:25:347楼 得分:0
    可以用vb.net写出来吗?谢谢了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tiancaolin
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-24 20:56:308楼 得分:0
    逻辑好复杂
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • timmyfeng66
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-24 21:03:249楼 得分:0
    但是只能读出categoryid其他的不能读出来
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • timmyfeng66
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-24 21:08:3410楼 得分:0
    如果我直接取出两行就很容易,但是从不同的行取出不同的字段,不知道如何搞
    Private Sub bindgrid1()
            If Not IsPostBack Then
                Dim con As New SqlConnection
                Dim cmd As New SqlCommand
              Dim dr As SqlDataReader
      con.ConnectionString = ConfigurationSettings.AppSettings("database")
                cmd.Connection = con
                cmd.CommandType = CommandType.Text
                cmd.CommandText = "select * from database"


                con.Open()
                dr = cmd.ExecuteReader()
                DataGrid1.DataSource = dr
                DataGrid1.DataBind()

                dr1.Close()
                con.Close()

            End If
    datagrid的属性生成器不知道如何设计才得到:

    datagrid功能如下:
    对象1    对象2      对象3
    恋人      朋友        父母
    病人      老师        客户
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • timmyfeng66
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-04-29 17:31:2111楼 得分:0
    还没有解决,解决到我给全部分
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • UltraBejing
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-05-01 08:59:3512楼 得分:0
    接分先!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved