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表的字段为中文(为了方便打印出来)
字段为(使用部门,节目名称,设备预约人,设备类型,用时合计)
~~~~写了很久都写不好`
我用了以下方法:
1)用视图
create view 视图名
as
select * from 表1 union select * from 表2 ……
(2)复制表
select into 新表(注:无需创建)
from 
(select * from 表1 union select * from 表2)
2.insert into 新表(注:需新建后才可以引用)
(select * from 表1 union select * from 表2)
帮忙写一个INSERT到C表的全部语句~最好能运行成功的`~真的不要再给例子了`但是也写不好`~~跪求达人`~~~~~~~~~~~~~~~~~~~帮忙`~我是刚进公司的新手程序员`这是任务`想哭了`~写不出来啊`~
分只有那么多了,希望高手救救我`~我全部的分都给出来`了`~
“round(datediff(n,min(a.dusestarttime),max(a.duseendtime))/60.00,2) as ctime”是将时间浍总~写入新列CTIME

解决方案 »

  1.   

    select a.sdepotname,a.sprogramname,a.spersonname,b.typename,
    round(datediff(n,min(a.dusestarttime),max(a.duseendtime))/60.00,2) as ctime
    into c 
    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
      

  2.   

    楼下的朋友INSERT是OK的`~谢谢你了~~可是我笨`~
    是这样的`如果我的C表存在~它是个空表~字段为(使用部门,节目名称,设备预约人,设备类型,用时合计)
    将UNION的结果插入到C表中,要怎么写INSERT语句`谢谢你了~~能帮我看看吗?
      

  3.   

    insert into C(使用部门,节目名称,设备预约人,设备类型,用时合计)
    Select * from
    (select a.sdepotname,a.sprogramname,a.spersonname,b.typename,
    round(datediff(n,min(a.dusestarttime),max(a.duseendtime))/60.00,2) as ctime
    into c  
    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) tb
      

  4.   

    运行试试
    select * into C 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
      

  5.   

    #4楼的好强大`运行OK了`太谢谢你了`~等会儿我要将这些语句折到ASP。NET里去``~
    不过我不明白 最后的那个 T 是啥意思啊?#1楼的也谢谢你`你写的也是对的`非常感谢你`#3楼的,虽然你的运行报错,但是也非常感谢你谢谢大家了`
      

  6.   

    create view vw_test
    as
    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格式摄像机’或者其它的设备名字,功能也像上面的那样,两个表UNION后再INSERT到C表中,请问怎么写?
      

  8.   

    create view vw_test
    as
    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 and b.typename='D-BET格式摄像机' 
    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 and b.typename='D-BET格式摄像机' 
    group by a.sdepotname,a.sprogramname,a.spersonname,b.sdevtype
      

  9.   

    #10楼`这个报错啊`提示:
    服务器:消息 207,级别 16,状态 3,行 1
    列名‘typename’ 无效。 
    服务器:消息 207,级别 16,状态 1,行 1
    列名‘typename’ 无效。