为什么在两张表合并后会出现重复的项目?

1917584 2004-11-12 11:17:57
我有二张表:hhh1,hhh2;
其中表hhh1中有50行
表hhh2中有100行
表hhh2中的型号是含盖表hhh1中的型号。

我想要的结果是:从表hhh2中找到关于“型号”和表hhh1中“型号”相同的行,并把这些相同的行加到表hhh1中。



...全文
221 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2004-11-12
  • 打赏
  • 举报
回复
--备件表中的备份编号不重复的话,这样计算是没有问题的

select 总成本=sum(b.单价*a.数量)
from 外销出库 a,成本 b
where a.备件编号=b.备件编号
and a.出库时间>='2004-10-1' and a.出库时间<'2004-11-1'
1917584 2004-11-12
  • 打赏
  • 举报
回复
我不举例子了,把我的现实表搬过来吧!
表1:外销出库
单据编号 出库时间 备件编号 数量
2004100008 2004-10-1 1106153J01-C120 1.00
2004100008 2004-10-1 1231062J02-C021 1.00
2004100008 2004-10-1 165004M800-C165 1.00
2004100008 2004-10-1 172211E300-B055 1.00
2004100008 2004-10-1 1722651E01-B049 1.00
2004100008 2004-10-1 1724050Y00-C053 1.00
2004100008 2004-10-1 182017N900-B035 1.00
2004100008 2004-10-1 214605E100-A056 1.00
2004100008 2004-10-1 214607N900-A084 1.00
2004100008 2004-10-1 215460E000-B094 1.00
2004100008 2004-10-1 215470E000-B094 1.00
2004100008 2004-10-1 231004N010-B039 1.00
2004100008 2004-10-1 240105E907-B070 1.00
2004100008 2004-10-1 240105E917-B070 1.00
2004100008 2004-10-1 240125E917-B070 1.00
2004100008 2004-10-1 248107N910-A084 1.00
2004100008 2004-10-1 248205E910-A084 1.00
2004100008 2004-10-1 248305E910-A084 1.00
2004100008 2004-10-1 252904M415-B162 1.00
2004100008 2004-10-1 252905E903-B162 1.00
2004100008 2004-10-1 253605M000-B162 1.00
2004100008 2004-10-1 253700M001-B069 1.00
……
……


表2:成本
序号 备件编号 备件名 单价
1 009215352A-999 锁紧销 1.46
2 0128100111-WG 保险杠螺钉卡座 0.45
3 128100601 螺钉座(WG) 0.5
4 0128101081-999 垫圈 2.92
5 0155200043-999 卡扣 2.91
6 0155300731-999 卡扣 2.92
7 0155301781-999 卡扣 1.84
8 0155305351-999 卡扣 2.69
9 0155307921-999 卡扣 3.02
10 0155307981-999 内饰夹 3.02
……
……
表1是我10月外销出库的备件和备件数量(只贴了一部分,关于备件编号在一个月里一种备件肯定不止出库一次,所以备件编号在一个月里有重复)
表2是我所有的备件成本(只贴了一部分,备件编号没有重复的)

我就只一个目的
我10月外销出库的成本是多少?
zjcxc 元老 2004-11-12
  • 打赏
  • 举报
回复
--不过,既然你说有重复的数据,那就说明你的hhh1表中,同一型号有多个价格
--可以这样改(取最小价格):

select b.*,a.价格
from hhh1 a,(select 型号,价格=min(价格) from hhh2 group by 型号)b
where a.型号=b.型号
zjcxc 元老 2004-11-12
  • 打赏
  • 举报
回复
光看你举出的数据,这样就行了.

select b.*,a.价格 from hhh1 a,hhh2 b where a.型号=b.型号
pbsql 2004-11-12
  • 打赏
  • 举报
回复
那不就是这样吗:
select hhh2.日期,hhh2.型号,hhh2.数量,hhh1.价格 from hhh1,hhh2 where hhh1.型号=hhh2.型号
1917584 2004-11-12
  • 打赏
  • 举报
回复
表hhh1

型号 价格
001 2.00
002 1.00
003 1.00
004 1.00
……


表hhh2

日期 型号 数量
0401 003 4
0401 001 1
0402 002 2
0403 001 1
……

我要的是在表hhh2中得到我某种型号的价格???????

还是举个例子直观些!
zjcxc 元老 2004-11-12
  • 打赏
  • 举报
回复
至于插入那个,实在看不明白什么意思? 最好能举个例子说明问题.
zjcxc 元老 2004-11-12
  • 打赏
  • 举报
回复
前面我已经说过了,你两个表的型号均有重复,这样形成的是多对多的关系,自然会重复的

你要插入不重复的,首先就要说明在型号重复的情况下,其他字段的取舍问题.
1917584 2004-11-12
  • 打赏
  • 举报
回复
呵呵!to zjcxc(邹建)
我用

select *
from hhh1,hhh2
where hhh1.型号=hhh2.型号
得到的结果是>50条的,
我要的是以表hhh1和hhh2中的型号为判断标准,把在hhh1中型号相同的一些列加入到表hhh2中。
zjcxc 元老 2004-11-12
  • 打赏
  • 举报
回复
举例说明
1917584 2004-11-12
  • 打赏
  • 举报
回复
是的 关于型号 其中的一个表里有重复的。
zjcxc 元老 2004-11-12
  • 打赏
  • 举报
回复
--要求是否写错了呢? 应该是这样的吧?
--"从表hhh2中找到关于“型号”和表hhh1中“型号”不相同的行,并把这些相同的行加到表hhh1中。"

--如果是这样,就写做:
insert hhh1 select * from hhh2 a
where not exists(select * from hhh1 where 型号=a.型号)
zjcxc 元老 2004-11-12
  • 打赏
  • 举报
回复
楼主的要求和帖子标题有出入:
"从表hhh2中找到关于“型号”和表hhh1中“型号”相同的行,并把这些相同的行加到表hhh1中。"

这个要求不就是把重复的数据加到hhh1中吗?

--这样插入
insert hhh1 select * from hhh2 a where exists(select * from hhh1 where 型号=a.型号)

davorsuker39 2004-11-12
  • 打赏
  • 举报
回复
insert hhh1
select b.* from hhh1 a, hhh2 b where a.型号=b.型号
zjcxc 元老 2004-11-12
  • 打赏
  • 举报
回复
因为两个表中型号都有重复,从而形成多对多的关系,所以就重复了.
sdhdy 2004-11-12
  • 打赏
  • 举报
回复
insert hhh1
select a.* from hhh2 a, hhh1 b where a.型号=b.型号
pbsql 2004-11-12
  • 打赏
  • 举报
回复
是找不同的行吧?相同的还加吗?

相同的行:
select * from hhh2 where 型号 in (select 型号 from hhh1)
不同的行:
select * from hhh2 where 型号 not in (select 型号 from hhh1)
1917584 2004-11-12
  • 打赏
  • 举报
回复
问题以一种烦琐的方式解决,,结贴,谢谢大家。。。

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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