您现在的位置是:网站首页> 编程资料编程资料
交叉表查询sql语句_数据库其它_
2023-05-27
245人已围观
简介 交叉表查询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
组名
成员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
相关内容
- 一个查询的SQL语句请教,希望能够用一条SQL语句得到结果_数据库其它_
- 一个多表查询的SQL语句_数据库其它_
- Select data from an Excel sheet in MSSQL_数据库其它_
- 如何让你的SQL运行得更快_数据库其它_
- 数据库正规化和设计技巧_数据库其它_
- SQL Server数据库性能优化技术第1/2页_数据库其它_
- ACCESS转化成SQL2000需要注意的几个问题小结_数据库其它_
- Sql Server 和 Access 操作数据库结构Sql语句小结_数据库其它_
- Sql语句求最小可用id_数据库其它_
- 问个高难度的复杂查询(在一个时间段内的间隔查询)_数据库其它_