oracle中如何将多个查询结果在一张表中显示

查询表1得到结果姓名人数张三3李四5王五6查询表2得到结果姓名人数张三4钱二6李四1查询表3得到结果姓名人数王五3钱二2希望把这三个结果显示在一张表上姓名表1人数表2人数... 查询表1得到结果
姓名 人数
张三 3
李四 5
王五 6
查询表2得到结果
姓名 人数
张三 4
钱二 6
李四 1
查询表3得到结果
姓名 人数
王五 3
钱二 2
希望把这三个结果显示在一张表上
姓名 表1人数 表2人数 表3人数
钱二 6 2
张三 3 4
李四 5 1
王五 6 3
空的值也可以置0
一楼把我意思理解错误啦,怪我没有表达清楚,表一结果我是这样查出来的
select 姓名,count(姓名) from 表1 group by 姓名
表二、表三 都一样 我说的人数不是字段值 是结果集 而且我的姓名里面值有N多 无法一一列举,所有用where name="张三,李四,王五" 不太合适
展开
 我来答
yjx_xiaoxin
2011-04-21 · TA获得超过6702个赞
知道大有可为答主
回答量:4618
采纳率:50%
帮助的人:2532万
展开全部
可以将你的三个表的查询结果使用union all联合起来,然后使用Oracle的decode函数来查询
select 姓名,
sum(decode(tbname,'表1',人数,null)) 表1人数,
sum(decode(tbname,'表2',人数,null)) 表2人数,
sum(decode(tbname,'表3',人数,null)) 表3人数
from
(select 姓名,count(姓名) 人数,'表1' tbname from 表1 group by 姓名
union all select 姓名,count(姓名),'表2' from 表2 group by 姓名
union all select 姓名,count(姓名),'表3' from 表3 group by 姓名
)
group by 姓名;
magic_84
2011-04-21 · TA获得超过493个赞
知道小有建树答主
回答量:211
采纳率:0%
帮助的人:53.9万
展开全部
--可以使用sql99语法中的外关联 ,如下
SELECT
CASE WHEN 表1.姓名 IS NOT NULL
THEN 表1.姓名
ELSE CASE WHEN 表2.姓名 IS NOT NULL
THEN 表2.姓名
ELSE CASE WHEN 表3.姓名 IS NOT NULL
THEN 表3.姓名 ELSE '未知'
END
END
END AS 姓名
,表1.人数,表2.人数,表3.人数
FROM 表1 FULL OUTER JOIN
T2 ON 表1.姓名 = 表2.姓名
FULL OUTER JOIN
T3 ON 表1.姓名 = 表3.姓名
--这个方法如果表有n多张的话,名字会写的比较繁琐,但是思路应该没问题
--如果看着麻烦,可以把select和from之间的语句换成 * , 相信你能看懂结果
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-05-05
展开全部
给段代码 使用数据库是vs2005自带的sql express。当然 不同的数据库连接字符串不一样 但是GetDataSet(string sql, string tablename)
方法是通用的~参数sql是你sql查询语句 tablename是输出地表明 可以随便添

public static string ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=数据库文件路径;Integrated Security=True;Connect Timeout=30;User Instance=True";
public DataSet GetDataSet(string sql, string tablename)
{
DataSet ds = new DataSet();
SqlConnection con = new SqlConnection(DataAccess.ConnectionString);
SqlDataAdapter da = new SqlDataAdapter(sql, con);
try
{
da.Fill(ds, tablename);
if (ds.HasChanges()) da.Update(ds);
}
catch (Exception ex)
{
MessageBox.Show("打开数据库表错误:" + ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

}
finally
{

con.Close();
con.Dispose();
da.Dispose();
}
return ds;
}

使用方法 datagridview1.datasource=GetDataSet("select * from student where name="姚明"","table1") //datagridview1当然是你winfrom里的一个datagridview
另外,虚机团上产品团购,超级便宜
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
spss_clm
2011-04-22 · 超过11用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:34.5万
展开全部
这就是行专列呀
先把这几个结果集union all 合并成一个结果集
对这个结果集用行专列的方式转换就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangcy3173
2011-04-21 · TA获得超过131个赞
知道答主
回答量:166
采纳率:0%
帮助的人:145万
展开全部
就是三张表使用全连接的问题
create table wcy_t1(f1 varchar2(30),f2 number);
create table wcy_t2(f1 varchar2(30),f2 number);
create table wcy_t3(f1 varchar2(30),f2 number);
insert into wcy_t1 values('张三',3);
insert into wcy_t1 values('李四',5);
insert into wcy_t1 values('王五',6);
insert into wcy_t2 values('张三',4);
insert into wcy_t2 values('钱二',6);
insert into wcy_t2 values('李四',1);
insert into wcy_t3 values('王五',3);
insert into wcy_t3 values('钱二',2);

select nvl(a.f1,b.f1) f1,a.f2 f10,b.f20,b.f30 from wcy_t1 a
full join (select nvl(b.f1,c.f1) f1,b.f2 f20,c.f2 f30 from wcy_t2 b
full outer join wcy_t3 c on b.f1=c.f1) b
on a.f1=b.f1;
F1 F10 F20 F30
------------------------------ ---------- ---------- ----------
李四 5 1
张三 3 4
王五 6 3
钱二 6 2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式