A表
select * from xc_wjrecord
sdepotname sprogramname sprogramname spersonname dusestarttime duseendtime
科教部 科教部特别节目 科教部特别节目 测试1 2010-01-28 11:35:00.000 2010-01-28 11:37:59.000
科教部 科教部特别节目 科教部特别节目 测试1 2010-01-28 11:35:00.000 2010-01-28 11:37:59.000
科教部 科教部特别节目 科教部特别节目 测试1 2010-01-28 16:04:13.000 2010-01-28 23:59:59.000
科教部 科教部特别节目 科教部特别节目 测试1 2010-01-29 00:00:00.000 2010-01-29 23:59:59.000
科教部 科教部特别节目 科教部特别节目 测试1 2010-01-31 00:00:00.000 2010-02-01 15:45:48.000B表
select * from xc_wjmasterdevice
sdepotname sprogramname sprogramname spersonname typename dusestarttime duseendtime
专题部 今晚大件事 今晚大件事 何少敏 D-BET格式摄像机 2010-04-16 14:05:32.000 2010-04-16 15:13:14.000
专题部 今晚大件事 今晚大件事 何少敏 D-BET格式摄像机 2010-04-16 14:05:32.000 2010-04-16 15:13:14.000A表和B表的差别就是多一个typename字段`其它字段一样,现在我让两个表关联`我用一个UNION`SELECT语句如下:
select a.sdepotname,a.sprogramname,a.spersonname,b.typename,
round(datediff(n,min(a.dusestarttime),max(a.duseendtime))/60.00,2) as ctime from xc_wjrecord a,xc_wjmasterdevice b
where a.id=b.id   
group by a.sdepotname,a.sprogramname,a.spersonname,b.typename
union
select a.sdepotname,a.sprogramname,a.spersonname,b.sdevtype as typename,
round(datediff(n,min(a.dusestarttime),max(a.duseendtime))/60.00,2) as ctime from xc_wjrecord a,xc_wjslavedevice b
where a.id=b.id   
group by a.sdepotname,a.sprogramname,a.spersonname,b.sdevtype表.xc_wjrecord 中没有typename字段,需要UNION表.xc_wjmasterdevice关联
得到结果如下:sdepotname sprogramname spersonname typename ctime
大型活动部 晚会制作 刘平 D-BET格式摄像机 160.470000
大型活动部 晚会制作 刘平 充电器 160.470000
大型活动部 晚会制作 刘平 电池 160.470000
大型活动部 晚会制作 刘平 广角镜头 160.470000
大型活动部 晚会制作 刘平 话筒 160.470000
大型活动部 晚会制作 刘平 脚架 160.470000
大型活动部 晚会制作 刘平 栏目外景灯具 94.720000现我我想将上面的结果INSERT到一个新表C中,C表的字段为中文(为了方便打印出来)
字段为(使用部门,节目名称,设备预约人,设备类型,用时合计)
~~~~写了很久都写不好`
帮忙写一个INSERT到C表的全部语句~最好能运行成功的~~
这个贴子我先前发过,虽然是OK的`~但是我发现将SQL语句分解到C#后,用视图有BUG,所以我现在的想法是~写个INSERT的语句,直接把结果插入到我在系统里建的一个临时表里C表,C表的字段(使用部门,节目名称,设备预约人,设备类型,用时合计)
谢谢了~

解决方案 »

  1.   

    在没有 typename 的查询里面加上字段 typename 就可以 union 啦如:select *,typename='' from .... union select *,typename from ....
      

  2.   

    问题一。1楼没明白我的意思,查询我写好了UNION的`我只是想将UNION的结果INSERT 到C表中,C表是临时表,已经存在的,我的意思是怎么写INSERT到C表中的语句。 问题二。如果我现在只想查找typename=‘D-BET格式摄像机’或者其它的设备名字,功能也像上面的那样,两个表UNION后再INSERT到C表中,请问怎么写?加分了我全部的分,希望有高手帮帮我!
      

  3.   

    insert into  C select * from (
    select a.sdepotname as 使用部门,a.sprogramname as 节目名称,a.spersonname as 设备预约人,b.typename as 设备类型,
    round(datediff(n,min(a.dusestarttime),max(a.duseendtime))/60.00,2) as 用时合计 from xc_wjrecord a,xc_wjmasterdevice b
    where a.id=b.id   
    group by a.sdepotname,a.sprogramname,a.spersonname,b.typename
    union
    select a.sdepotname,a.sprogramname,a.spersonname,b.sdevtype as typename,
    round(datediff(n,min(a.dusestarttime),max(a.duseendtime))/60.00,2) as ctime from xc_wjrecord a,xc_wjslavedevice b
    where a.id=b.id   
    group by a.sdepotname,a.sprogramname,a.spersonname,b.sdevtype
    ) T
      

  4.   

    union 的前后面个表字段数量要一样,数据类型要保证隐式能够相互的进行隐式转换
      

  5.   

    insert into  C
    select * from (
    select a.sdepotname as 使用部门,a.sprogramname as 节目名称,a.spersonname as 设备预约人,b.typename as 设备类型,
    round(datediff(n,min(a.dusestarttime),max(a.duseendtime))/60.00,2) as 用时合计 from xc_wjrecord a,xc_wjmasterdevice b
    where a.id=b.id   
    group by a.sdepotname,a.sprogramname,a.spersonname,b.typename
    union
    select a.sdepotname,a.sprogramname,a.spersonname,b.sdevtype as typename,
    round(datediff(n,min(a.dusestarttime),max(a.duseendtime))/60.00,2) as ctime from xc_wjrecord a,xc_wjslavedevice b
    where a.id=b.id   
    group by a.sdepotname,a.sprogramname,a.spersonname,b.sdevtype
    ) T
    where 设备类型='D-BET格式摄像机'
      

  6.   


    --没有创建c表的情况下用下面的语句。
    select * into c from 
    (select a.sdepotname 使用部门,a.sprogramname 节目名称,a.spersonname 设备预人,
    b.typename 设备类型,
    round(datediff(n,min(a.dusestarttime),max(a.duseendtime))/60.00,2) as 用时合计 
    from xc_wjrecord a,xc_wjmasterdevice b
    where a.id=b.id   
    group by a.sdepotname,a.sprogramname,a.spersonname,b.typename
    union
    select a.sdepotname,a.sprogramname,a.spersonname,b.sdevtype as typename,
    round(datediff(n,min(a.dusestarttime),max(a.duseendtime))/60.00,2) as ctime from xc_wjrecord a,xc_wjslavedevice b
    where a.id=b.id   
    group by a.sdepotname,a.sprogramname,a.spersonname,b.sdevtype) 
      

  7.   


    如果让typename多指定几个内容呢?
    比如两个一起“设备类型='D-BET格式摄像机'”“设备类型='HDCAM高清摄像机”要怎么写`突然发现我的数据库真的很烂
      

  8.   

    我知道了`后面加 WHERE 设备类型 IN(‘’,‘’)就可以了`