oracle中如何将多个查询结果在一张表中显示
发布网友
发布时间:2022-04-10 09:39
我来回答
共7个回答
热心网友
时间:2022-04-10 11:09
可以将你的三个表的查询结果使用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 姓名;
热心网友
时间:2022-04-10 12:27
--可以使用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之间的语句换成 * , 相信你能看懂结果
热心网友
时间:2022-04-10 14:01
给段代码 使用数据库是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
另外,虚机团上产品团购,超级便宜
热心网友
时间:2022-04-10 15:53
这就是行专列呀
先把这几个结果集union all 合并成一个结果集
对这个结果集用行专列的方式转换就行了
热心网友
时间:2022-04-10 18:01
就是三张表使用全连接的问题
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
热心网友
时间:2022-04-10 20:25
/** Full outer join **/
select nvl(T1.name , nvl(T2.name , T3.name ) ) as 姓名 ,
T1.num 表1人数 ,
T2.num 表2人数 ,
T3.num 表3人数
from T1 full outer join T2 on T1.name = T2.name
full outer join T3 on T1.name = T3.name
热心网友
时间:2022-04-10 23:07
select distinct t.name,sum(num1),sum(num2),sum(num3) from (
select name,num num1,0 num2,0 num3 from b
union
select name,0 num1,num num2,0 num3 from c
union
select name,0 num1,0 num2,num num3 from d) t
group by t.name;