交叉表查询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

(0)

相关推荐

  • 交叉表查询sql语句

    表一:      组名      成员1id      成员2id      成员3id 示例数据:      冲锋组     1       2       3      后卫组     2       3       4 表二:      成员id      成员姓名 示例数据:      1     张三      2     李四      3     王五      4     陆二 要求结果 冲锋组     张三       李四       王五      后卫组     李四  

  • SQL Server 交叉表查询 case

    代码如下所示: 表landundertake结构如下所示: 表appraiser结构如下所示: access代码: 复制代码 代码如下: TRANSFORM First(Landundertake.valuerId) AS valuerId之First SELECT Appraiser.quarterId, Landundertake.landCode FROM Landundertake INNER JOIN Appraiser ON (Landundertake .valuerId = Ap

  • Java反射 JavaBean对象自动生成插入,更新,删除,查询sql语句操作

    通过反射根据提供的表名.POJO类型.数据对象自动生成sql语句. 如名为 User 的JavaBean与名为 user 的数据库表对应,可以提供一个封装有数据的User对象user,根据user中含有的数据自动生成sql语句. 1.生成插入语句(插入user中包含的非空数据的语句): String insertSql = getInsertSql("user", User.class, user); 2.生成更新语句(user中id不能为空): String updateSql =

  • MySql数据库之alter表的SQL语句集合

    mysql之alter表的SQL语句集合,包括增加.修改.删除字段,重命名表,添加.删除主键等. 1:删除列 ALTER TABLE [表名字] DROP [列名称] 2:增加列 ALTER TABLE [表名字] ADD [列名称] INT NOT NULL COMMENT '注释说明' 3:修改列的类型信息 ALTER TABLE [表名字] CHANGE [列名称][新列名称(这里可以用和原来列同名即可)] BIGINT NOT NULL COMMENT '注释说明' 4:重命名列 ALT

  • 用注解编写创建表的SQL语句

    今晚读了think in java 的章节,感觉很不错,我就敲了下来,贴上代码给以后一个回顾: 建议提前读一下think in java 注解 . 说明创建注解我在第一个注解说明下,以后的注解不在说明.' DBTable 注解: /** * Project Name:myannotation * File Name:DBTable.java * Package Name:com.iflytek.db * Date:2016-8-28下午08:20:54 * Copyright (c) 2016,

  • laravel 获取某个查询的查询SQL语句方法

    如下所示: DB::connection()->enableQueryLog();#开启执行日志 $count = DB::table('test') //执行查询 ->whereNull('deleted_at') ->where('id', '=', 3) ->where('Name', '=', '测试') ->count(); print_r(DB::getQueryLog()); //获取查询语句.参数和执行时间 Array ( [0] => Array (

  • djang常用查询SQL语句的使用代码

    将django语法和sql对应一下,希望对大家有所帮助 查询单个列的值 story.object.values_list("url", flat=True) SELECT `story`.`url` FROM `hbtc_story` WHERE `story`.`status` = resolved AND查询 Stories.objects.filter(Q(status='resolved') & Q(status='developing')) SELECT * FROM

  • mysql创建表的sql语句详细总结

    mysql创建表的sql语句 mysql建表常用sql语句: 连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样) 断开:exit (回车) 创建授权:grant select on 数据库.* to 用户名@登录主机 identified by \"密码\" 修改密码:mysqladmin -u用户名 -p旧密码 password 新密码 删除授权: revoke select,insert,update,delete om *.*

  • SQLServer中用T—SQL命令查询一个数据库中有哪些表的sql语句

    1.查询SQL中的所有表: Select TABLE_NAME FROM 数据库名称.INFORMATION_SCHEMA.TABLES Where TABLE_TYPE='BASE TABLE' 执行之后,就可以看到数据库中所有属于自己建的表的名称 2.查询SQL中所有表及列: Select dbo.sysobjects.name as Table_name, dbo.syscolumns.name AS Column_name FROM dbo.syscolumns INNER JOIN d

  • Oracle 数据库连接查询SQL语句

    内连接(inner join). 外连接: 全连接(full join).左连接(left join).右连接(right join). 交叉联接(cross join). 外连接与内连接不一样,外连接返回的查询结果中不仅包含符合条件的行,还包括左表(左外连接),右表(右外连接)或者两个连接表(全外连接)中的所有不符合条件的数据行. 1.左连接 (left [outer] join) 左外连接就是将左表的所有数据分别于右表的每条数据进行连接组合,返回的结果除内连接的数据外,还有左表中不符合条件的

随机推荐