SQL语句,实现A、B两表中的两列比较,输出数据相同行。

问题描述:
有A、B两表,其中
A表
单位 所在地区 (列名)
万向集团 浙江
胜利油田 山东
燕山石化 天津
上海宝钢 上海

B表
单位 时间 (列名)
华为集团 2011
万向集团 1999
胜利油田 2003
上海宝钢 2005
——————————————————————————————————————
现在要实现对A.单位、B.单位两列的对比,最终输出这两列中元素相同的行,并形成中间表C。
C表如下:
单位 所在地区 时间 (列名)
万向集团 浙江 1999
胜利油田 山东 2003
上海宝钢 上海 2005

怎么实现?
(扩充本题)
——————————————————————
A表为:{单位列不是全称,缺少某些文字}
单位 所在地区 (列名)
万向集 浙江
胜利油 山东
燕山石 天津
上海宝 上海

B表不变,即:
B表
单位 时间 (列名)
华为集团 2011
万向集团 1999
胜利油田 2003
上海宝钢 2005

现筛选A.单位和B.单位,若"%A.单位%"与B.单位某行相同则输出B表该行与A表该行,最终形成如下的中间表C。
单位A 单位B 所在地区 时间 (列名)
万向集 万向集团 浙江 1999
胜利油 胜利油田 山东 2003
上海宝 上海宝钢 上海 2005

第1个回答  2012-05-17
1.
select A.单位, A.所在地区, B.时间 from A inner join B on A.单位=B.单位

2.
select A.单位, B.单位, A.所在地区, B.时间 from A inner join B on B.单位 like '%'+A.单位+'%'追问

附带一个问题
现在有A表“科目”这一列,内容是这样的:
科目(列名)
万里线缆厂0005830仓库(2005.03)
张三等9户000330私宅(2001.02)
联想专卖店1005830店铺(2009.5)

现要拆分为3列:
单位 编号 时间
万里线缆厂-仓库 0005830 2005.03
张三等9户-私宅 000330 2001.02
联想专卖-店铺 1005830 2009.5

难点在于单位一列里面有数字、编号长度不固定、时间会有0X月和X月两种格式。
另补加2分~

追答

select dbo.fnSplitString(A.科目,1) as [单位],dbo.fnSplitString(A.科目,2) as [编号], dbo.fnSplitString(A.科目,3) as [时间] from A表
go
--针对你的问题写了个返回字符串的函数:fnSplitString
--参数:source是要拆分字符串, index是返回第几列

追问

fnSplitString函数具体是怎样的?
呵呵,可以把解决问题的整个完整的语句发上来么?

第2个回答  2012-05-17
1.select B.单位, A.所在地区, B.时间 from A,B where A.单位=B.单位;

2.select B.单位, A.所在地区, B.时间 from A,B where %A.单位%=B.单位;
相似回答