丽江宠物网

oracle 将查询结果张三之子输出为张三

    发布时间:2019-07-27

    就是三张表使用全连接的问题
    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

    回复:

    4,'李四,1,null

    回复:

    这就是行专列呀
    先把这几个结果集union all 合并成一个结果集
    对这个结果集用行专列的方式转换就行了

    回复:

    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;

    回复:

    假设表名为TBALE1, 下面的语句可完成您的需求. 亲测

    SELECT ID, NAME, A, B
    FROM (SELECT T1.*,
    ROW_NUMBER() OVER(PARTITION BY NAME ORDER BY NUM DESC, ID DESC) AS RN
    FROM (SELECT T.*,
    CASE
    WHEN A IS NOT NULL AND B IS NULL THEN
    3
    WHEN A IS NOT NULL AND B IS NOT NULL THEN
    2
    WHEN A IS NULL AND B IS NULL THEN
    1
    END AS NUM
    订肠斥段俪灯筹犬船华 FROM TABLE1 T) T1) T2
    WHERE RN = 1

    回复:

    /** 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

    回复:

    给段代码 使用数据库是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
    另外,虚机团上产品团购,超级便宜

    回复:

    "做个查询,假如name字段有相同的,那么优先取a有值,b没值;其次是取a,b都有值,最后是a,b都没值。如果之后都有重复数据,就按id的由大到小取值"
    优先取a有值,b没值,如果这个条件满足,後面其次取a,b都有值,最後是a,b都没值,这两个条件的值还要取出来按顺序排,还是不要?

    回复:

    null)) 表1人数;表1',null)) 表2人数;,'表1'表2' tbname from 表1 group by 姓名
    union all select 姓名; from 表3 group by 姓名
    )
    group by 姓名,
    sum(decode(tbname,count(姓名); from 表2 group by 姓名
    union all select 姓名,人数;;表3',',',
    sum(decode(tbname,null)) 表3人数
    from
    (select 姓名,',人数,然后使用Oracle的decode函数来查询
    select 姓名,count(姓名);表2',
    sum(decode(tbname,',人数,count(姓名) 人数;表3','可以将你的三个表的查询结果使用union all联合起来

    回复:

    人数
    FROM 表1 FULL OUTER JOIN
    T2 ON 表1,表3.姓名
    ELSE CASE WHEN 表2.人数.姓名 IS NOT NULL
    THEN 表1.姓名
    FULL OUTER JOIN
    T3 ON 表1.姓名 ELSE ',但是思路应该没问题
    --如果看着麻烦--可以使用sql99语法中的外关联 .人数,名字会写的比较繁琐.姓名
    --这个方法如果表有n多张的话,表2.姓名
    ELSE CASE WHEN 表3.姓名 = 表3.姓名 IS NOT NULL
    THEN 表3.姓名 IS NOT NULL
    THEN 表2.姓名 = 表2;
    END
    END
    END AS 姓名
    ,表1;未知',如下
    SELECT
    CASE WHEN 表1,可以把select和from之间的语句换成 *

    回复:

    cust_risk_log log
    where info;.,trans_date date);张三'
    insert into cust_risk_log values (123:

    create table cust_info(cust_name varchar2(10);
    insert into cust_risk_log values (456,log;小王'
    create table cust_risk_log(cust_no number.cust_name,sysdate-15).trans_date ) num
    from cust_info info ;

    select * from (
    select info.cust_no order by log;
    insert into cust_risk_log values (123,sysdate-2)用函数 row_nubmer() over (partition by .cust_no
    ) where num<. order by .cust_no=log;
    insert into cust_risk_log values (123,123),row_number() over ( partition by info;
    insert into cust_info values ('
    insert into cust_info values ('.trans_date;
    insert into cust_risk_log values (123,sysdate-35),sysdate-5),sysdate-20).,456);,cust_no number).) 来查

    测试代码..

    回复:

    a,b的值固定是1或null吗?还是有其他很多?

    回复:

    给你个思路吧
    子查询0:用max,把name、a、b相同的筛选出来
    下面的子查询以此为基表
    ----------------------订肠斥段俪灯筹犬船华--------------------------------------------
    子查询1:a有值,b没值
    子查询2:a,b都有值
    子查询3:a,b都没值
    子查询4:子查询2-子查询1 where 条件为 name相同的
    子查询5:子查询3-子查询2-子查询1 where 条件为 name相同的
    --------------------------------------------------------------------
    你想要的结果
    子查询6:子查询1 union 子查询2 union 子查询3

    回复:

    用函数 row_nubmer() over (partition by ... order by ...) 来查 测试代码: create table cust_info(cust_name varchar2(10),cust_no number); create table cust_risk_log(cust_no number,trans_date date); insert into cust_info values ('...

    上一篇:特效威哥多少钱一盆 下一篇:我喜欢的人坐我旁边,每星期都看着他过,他也知道我喜欢他怎么办阿...

    返回主页:丽江宠物网

    本文网址:http://0888pet.cn/view-48141-1.html
    信息删除