交叉表查询sql语句_数据库其它

表一:   
  组名   
  成员1id   
  成员2id   
  成员3id   

  示例数据:   
  冲锋组     1       2       3   
  后卫组     2       3       4   

  表二:   
  成员id   
  成员姓名   

  示例数据:   
  1     张三   
  2     李四   
  3     王五   
  4     陆二   

  要求结果     

  冲锋组     张三       李四       王五   
  后卫组     李四       王五       陆二  

复制代码 代码如下:

--建立测试环境   
  Create   Table   表1(组名   varchar(10),成员1id   varchar(10),成员2id   varchar(10),成员3id   varchar(10))   
  --插入数据   
  insert   into   表1   
  select   '冲锋组','1','2','3'   union   
  select   '后卫组','2','3','4'     
    Create   Table   表2(成员id   varchar(10),成员姓名   varchar(10))   
  --插入数据   
  insert   into   表2   
  select   '1','张三'   union   
  select   '2','李四'   union   
  select   '3','王五'   union   
  select   '4','陆二'     

  --测试语句   
    select   a.组名,   
  成员1=(select   成员姓名   from   表2   b   where   a.成员1id=b.成员id),   
  成员1=(select   成员姓名   from   表2   b   where   a.成员2id=b.成员id),   
  成员1=(select   成员姓名   from   表2   b   where   a.成员3id=b.成员id)   
  from   表1   a   

      
  --删除测试环境   
  Drop   Table   表1   
  Drop   Table   表2   

  /*   
  组名                   成员1                 成员1                 成员1                   
  ----------   ----------   ----------   ----------     
  冲锋组                 张三                   李四                   王五   
  后卫组                 李四                   王五                   陆二   

  (所影响的行数为   2   行)   
  */

复制代码 代码如下:

select     
          a.组名,   
          成员1   =   max(case   b.成员id   =   a.成员1id   then   b.成员姓名   end),   
          成员2   =   max(case   b.成员id   =   a.成员2id   then   b.成员姓名   end),   
          成员3   =   max(case   b.成员id   =   a.成员3id   then   b.成员姓名   end),   
  from     
          表一   a,   
          表二   b   
  group   by   
          a.组名

复制代码 代码如下:

select     
          a.组名,   
          成员1   =   max(case   b.成员id   =   a.成员1id   then   b.成员姓名   end),   
          成员2   =   max(case   b.成员id   =   a.成员2id   then   b.成员姓名   end),   
          成员3   =   max(case   b.成员id   =   a.成员3id   then   b.成员姓名   end)   
  from     
          表一   a,   
          表二   b   
  group   by   
          a.组名

复制代码 代码如下:

select   a.组名,   
                成员1=(select   成员姓名   from   表2   b   where   a.成员1id=b.成员id),   
                成员1=(select   成员姓名   from   表2   b   where   a.成员2id=b.成员id),   
                成员1=(select   成员姓名   from   表2   b   where   a.成员3id=b.成员id)   
  from   表一   a   

复制代码 代码如下:

正解是   
  select   表1.组名,   
                (select   表1.成员姓名   from   表2   b   where   表1.成员1id=表2.成员id)   as   成员1id,   
                (select   表1.成员姓名   from   表2   b   where   表1.成员2id=表2.成员id)   as   成员2id,   
                (select   表1.成员姓名   from   表2   b   where   表1.成员3id=表2.成员id)   as   成员3id   
  from   表1,表2

时间: 2024-10-25 17:53:15

交叉表查询sql语句_数据库其它的相关文章

sql语句 连表查询-连表查询 sql语句问题

问题描述 连表查询 sql语句问题 有个商品表,和商品属性表,一个商品,在商品属性表里有好几条,我想连表查出,一条商品对应的两个属性,两个属性在一行显示,怎么查,属性表的数据是这样 1 商品id 规格 2 商品id 厂家 我想要的结果: 1 商品id 规格 厂家 大能们,帮帮忙 解决方案 查询库中有多少表的SQL语句单表查询树形结构的SQL语句命名查询的sql语句的问题 解决方案二: 你select出来的结果当成colum

一个多表查询的SQL语句_数据库其它

有 表1:如下内容 表2:   如下内容      id     info id value      1 a 1 10      2 b 2 30      3 c      4 d      想得到      id value      1 10 //表2中存在      2 20 //表2中存在      3 0 //表2中不存在      4 0 //表2中不存在      是否可以使用一条sql语句来解决,而不必先从表1中得到id,再在表2中查找是否有该条记录,如果有就直接读取出来,没

复制数据库表中两个字段数据的SQL语句_数据库其它

复制数据库表中两个字段数据的SQL语句 今天为表新添加一个字段,但又想与表中的另一个字段值相同,由于数据过多想通过sql语句实现,经测试下面的这句话确实很好用. 复制代码 代码如下: update jb51_temp set B=A jb51_temp 代表表明 A是有数值的字段,B是新添加的字段 ,记住空值表放到前面,如果set a=b,那么你的数值都为空了,就麻烦了,建议操作前备份数据库. 如何将一个字段里的值复制添加到另一个字段中 比如,有二个字段A和B,A字段是值是"我",B字

海量数据库的查询优化及分页算法方案 2 之 改良SQL语句_数据库其它

二.改善SQL语句  很多人不知道SQL语句在SQL SERVER中是如何执行的他们担心自己所写的SQL语句会被SQL SERVER误解.比如 select * from table1 where name=zhangsan and tID > 10000 和执行: select * from table1 where tID > 10000 and name=zhangsan 一些人不知道以上两条语句的执行效率是否一样因为如果简单的从语句先后上看这两个语句的确是不一样如果tID是一个聚合索引

4表查询SQL语句问题!~~ 我问个问题花了10分钟! 看我花了这么长时间打问题 就帮帮我吧!~~ 没多少汉字不用怕 就这么点分了 都给了

问题描述 user表idusernmae2732128aaa29aaa11301113155532aaaaa35Archerreply表reply_iduser_idrelease_idreplyer_ipreply_bobycreated_time173515911我是回复的2007-11-10183515911我的回复的2007-07-11200159匿名我是回复的2007-04-22这个条数据user_id是0210189匿名阿斯顿范2007-08-85220190匿名的的的的2007-0

替换一个字段的所有非数字字符为空的sql语句_数据库其它

1.替换一个字段的所有非数字字符为空 update mobileNo_batchreg_black set mobile_no= replace( replace( replace( replace( replace( replace( replace( replace( replace( replace( replace( replace( replace( replace( replace( replace( replace( replace( replace( replace( repla

asp 合并记录集并删除的sql语句_数据库相关

DELETE FROM Tables WHERE ID NOT IN (SELECT Min(ID) FROM Tables GROUP BY Name) Min的话 保留最小的 或者保留最大 那就改成Max即可

select-如果某张表存在才去查询这张表,sql语句怎么写啊,一句话可以么

问题描述 如果某张表存在才去查询这张表,sql语句怎么写啊,一句话可以么 SELECT * FROM IF EXISTS A IF EXISTS A SELECT * FROM A 解决方案 可以,这个和数据库有关系,如果是oracle,你可以这样 select 1, decode( (select max(9) from user_tables where table_name='A'), 9, select 1 from A) from table 解决方案二: http://www.cnb

Oracle 数据库的分页查询sql语句

oracle 数据库教程的分页查询sql语句   oracle       select * from (select rownum r,t1.* from 表名称 t1 where rownum < m + n) t2 where t2.r >= m 例如从表sys_option(主键为sys_id)中从10条记录还是检索20条记录,语句如下: select * from (select rownum r,t1.* from sys_option where rownum < 30 )