将A表和B表的UNION结果INSERT到C表中~求助`部分代码已列出~

too1998 2010-05-07 04:37:17
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.000

B表
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.000

A表和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

...全文
109 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
too1998 2010-05-10
  • 打赏
  • 举报
回复
#10楼`这个报错啊`提示:
服务器:消息 207,级别 16,状态 3,行 1
列名‘typename’ 无效。
服务器:消息 207,级别 16,状态 1,行 1
列名‘typename’ 无效。
htl258_Tony 2010-05-10
  • 打赏
  • 举报
回复
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
too1998 2010-05-10
  • 打赏
  • 举报
回复
又有个问题了~假如我现在只想查找typename=‘D-BET格式摄像机’或者其它的设备名字,功能也像上面的那样,两个表UNION后再INSERT到C表中,请问怎么写?
--小F-- 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 too1998 的回复:]
#4楼的好强大`运行OK了`太谢谢你了`~等会儿我要将这些语句折到ASP。NET里去``~
不过我不明白 最后的那个 T 是啥意思啊?

#1楼的也谢谢你`你写的也是对的`非常感谢你`

#3楼的,虽然你的运行报错,但是也非常感谢你

谢谢大家了`
[/Quote]

T是别名 是语法的要求 在嵌套查询的子查询需要加个别名
htl258_Tony 2010-05-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 too1998 的回复:]
#4楼的好强大`运行OK了`太谢谢你了`~等会儿我要将这些语句折到ASP。NET里去``~
不过我不明白 最后的那个 T 是啥意思啊?

#1楼的也谢谢你`你写的也是对的`非常感谢你`

#3楼的,虽然你的运行报错,但是也非常感谢你

谢谢大家了`
[/Quote] T 是指定派生表的一个表别名。
htl258_Tony 2010-05-07
  • 打赏
  • 举报
回复
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
?
too1998 2010-05-07
  • 打赏
  • 举报
回复
#4楼的好强大`运行OK了`太谢谢你了`~等会儿我要将这些语句折到ASP。NET里去``~
不过我不明白 最后的那个 T 是啥意思啊?

#1楼的也谢谢你`你写的也是对的`非常感谢你`

#3楼的,虽然你的运行报错,但是也非常感谢你

谢谢大家了`
永生天地 2010-05-07
  • 打赏
  • 举报
回复
运行试试
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
bancxc 2010-05-07
  • 打赏
  • 举报
回复
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
too1998 2010-05-07
  • 打赏
  • 举报
回复
楼下的朋友INSERT是OK的`~谢谢你了~~可是我笨`~
是这样的`如果我的C表存在~它是个空表~字段为(使用部门,节目名称,设备预约人,设备类型,用时合计)
将UNION的结果插入到C表中,要怎么写INSERT语句`谢谢你了~~能帮我看看吗?
mujian1986 2010-05-07
  • 打赏
  • 举报
回复
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

22,295

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧