SQl查询:两张表各有4个字段,其中2个字段相同的合并查询问题

bdbody 2014-01-03 07:29:07
有两张表 命名为A 和 B

A的结构

企业编码 企业名称 领购日期 领购数量

001 上海一线公司 2013-12-25 50
001 上海一线公司 2013-12-28 120

B的结构

企业编码 企业名称 出库日期 数量

001 上海一线公司 2013-11-24 30
001 上海一线公司 2013-11-26 190

大家注意细节
A表里是领购日期 领购数量
B表里是出库日期 数量

但是A表里的领购日期和B表里的出库日期不会出现重复的情况

现在需求是 显示结果如下

企业编码 企业名称 领票日期 本次领购量
001 上海一线公司 2013-11-24 30
001 上海一线公司 2013-11-26 190
001 上海一线公司 2013-12-25 50
001 上海一线公司 2013-12-28 120
...全文
3517 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdbody 2014-01-03
  • 打赏
  • 举报
回复
但是无法显示每笔购买记录了?
bdbody 2014-01-03
  • 打赏
  • 举报
回复
引用 14 楼 yupeigu 的回复:
[quote=引用 13 楼 bdbody 的回复:] [quote=引用 8 楼 yupeigu 的回复:] [quote=引用 6 楼 bdbody 的回复:] 我刚才试试,union 后面的all 不加好像也行吧?
嗯 ,应该也行,因为两个表的数据不同,其实这个union all就是合并2个表的数据,而union 是现合并,然后去除重复的数据[/quote] 您好,我如果想统计这个企业领购了多少次发票呢?能够实现吗?[/quote]
select 企业编码,企业名称,COUNT(*)
from (
    select *,1 as rn from A
    union all
    select *,2 as rn from B
) as t1

group by 企业编码,企业名称
[/quote] 好像不行吧?我加上count(*) 报错了
bdbody 2014-01-03
  • 打赏
  • 举报
回复
我刚才写的是count(rq) 。。。。。 谢谢阳泉小酒家了
LongRui888 2014-01-03
  • 打赏
  • 举报
回复
引用 13 楼 bdbody 的回复:
[quote=引用 8 楼 yupeigu 的回复:] [quote=引用 6 楼 bdbody 的回复:] 我刚才试试,union 后面的all 不加好像也行吧?
嗯 ,应该也行,因为两个表的数据不同,其实这个union all就是合并2个表的数据,而union 是现合并,然后去除重复的数据[/quote] 您好,我如果想统计这个企业领购了多少次发票呢?能够实现吗?[/quote]
select 企业编码,企业名称,COUNT(*)
from (
    select *,1 as rn from A
    union all
    select *,2 as rn from B
) as t1

group by 企业编码,企业名称
bdbody 2014-01-03
  • 打赏
  • 举报
回复
引用 8 楼 yupeigu 的回复:
[quote=引用 6 楼 bdbody 的回复:] 我刚才试试,union 后面的all 不加好像也行吧?
嗯 ,应该也行,因为两个表的数据不同,其实这个union all就是合并2个表的数据,而union 是现合并,然后去除重复的数据[/quote] 您好,我如果想统计这个企业领购了多少次发票呢?能够实现吗?
岩崽先生 2014-01-03
  • 打赏
  • 举报
回复
引用 9 楼 bdbody 的回复:
[quote=引用 7 楼 u013148272 的回复:]
if OBJECT_ID('A') IS NOT NULL
DROP  TABLE [A]
CREATE TABLE [A](企业编码 varchar(10),企业名称 varchar(30),领购日期 varchar(20),领购数量 int)
insert into [a]
select '001' ,'上海一线公司','2013-12-25',50 union all
select '001','上海一线公司','2013-12-28',120 
if OBJECT_ID('B') is not null
drop table[B]
create table [B] (企业编码 varchar(10),企业名称 varchar(30),出库日期 varchar(20),数量 int)
insert into [B]
select '001' ,'上海一线公司','2013-12-24',30 union all
select '001','上海一线公司','2013-12-26	',190
 
select * from A 
SELECT * FROM B
--select * from [a] innser join [B] on 1=1

select A.企业编码,A.企业名称, A.领购日期 as 领票日期,A.领购数量 as 本次购票数量 from A
 UNION ALL  
select b.企业编码,b.企业名称, b.出库日期 as 领票日期,b.数量 as 本次购票数量 from B
您的这个前半部分是自动生成的吗?还是一句一句手写的?[/quote]恩 ,也没有X键啊 也许有,我是没有发现呢
AcHerat 元老 2014-01-03
  • 打赏
  • 举报
回复
前半部分生成测试表结构及其数据的都是别人自己手打的,为了更好的重现你的数据环境。 至于查询语句,主要有两点 1、关于子查询 select 你需要展示的字段名 from (子查询语句) as 别名 where ... order by ... 在SQL2005版本及其之上,可以采用with cte的用法 2、关于union all 这个是将不同的查询数据集按照相同的结构,不剔除重复上下连接到一起,其中只用union的时候是可以去掉重复的,重复表示的是 select col1,col2,col3... from a union select col1,col2,col3... from b 中的col1,col2,col3...完全重复的数据
bdbody 2014-01-03
  • 打赏
  • 举报
回复
引用 8 楼 yupeigu 的回复:
[quote=引用 6 楼 bdbody 的回复:] 我刚才试试,union 后面的all 不加好像也行吧?
嗯 ,应该也行,因为两个表的数据不同,其实这个union all就是合并2个表的数据,而union 是现合并,然后去除重复的数据[/quote] 谢谢指导新手,非常感谢。
bdbody 2014-01-03
  • 打赏
  • 举报
回复
引用 7 楼 u013148272 的回复:
if OBJECT_ID('A') IS NOT NULL
DROP  TABLE [A]
CREATE TABLE [A](企业编码 varchar(10),企业名称 varchar(30),领购日期 varchar(20),领购数量 int)
insert into [a]
select '001' ,'上海一线公司','2013-12-25',50 union all
select '001','上海一线公司','2013-12-28',120 
if OBJECT_ID('B') is not null
drop table[B]
create table [B] (企业编码 varchar(10),企业名称 varchar(30),出库日期 varchar(20),数量 int)
insert into [B]
select '001' ,'上海一线公司','2013-12-24',30 union all
select '001','上海一线公司','2013-12-26	',190
 
select * from A 
SELECT * FROM B
--select * from [a] innser join [B] on 1=1

select A.企业编码,A.企业名称, A.领购日期 as 领票日期,A.领购数量 as 本次购票数量 from A
 UNION ALL  
select b.企业编码,b.企业名称, b.出库日期 as 领票日期,b.数量 as 本次购票数量 from B
您的这个前半部分是自动生成的吗?还是一句一句手写的?
LongRui888 2014-01-03
  • 打赏
  • 举报
回复
引用 6 楼 bdbody 的回复:
我刚才试试,union 后面的all 不加好像也行吧?
嗯 ,应该也行,因为两个表的数据不同,其实这个union all就是合并2个表的数据,而union 是现合并,然后去除重复的数据
岩崽先生 2014-01-03
  • 打赏
  • 举报
回复
if OBJECT_ID('A') IS NOT NULL
DROP  TABLE [A]
CREATE TABLE [A](企业编码 varchar(10),企业名称 varchar(30),领购日期 varchar(20),领购数量 int)
insert into [a]
select '001' ,'上海一线公司','2013-12-25',50 union all
select '001','上海一线公司','2013-12-28',120 
if OBJECT_ID('B') is not null
drop table[B]
create table [B] (企业编码 varchar(10),企业名称 varchar(30),出库日期 varchar(20),数量 int)
insert into [B]
select '001' ,'上海一线公司','2013-12-24',30 union all
select '001','上海一线公司','2013-12-26	',190
 
select * from A 
SELECT * FROM B
--select * from [a] innser join [B] on 1=1

select A.企业编码,A.企业名称, A.领购日期 as 领票日期,A.领购数量 as 本次购票数量 from A
 UNION ALL  
select b.企业编码,b.企业名称, b.出库日期 as 领票日期,b.数量 as 本次购票数量 from B
bdbody 2014-01-03
  • 打赏
  • 举报
回复
我刚才试试,union 后面的all 不加好像也行吧?
bdbody 2014-01-03
  • 打赏
  • 举报
回复
引用 4 楼 yupeigu 的回复:
[quote=引用 3 楼 bdbody 的回复:] rn 能给隐藏什么的吗?别让他出现?
试试这样:
select 企业编码,企业名称,领购日期,领购数量
from (
    select *,1 as rn from A
    union all
    select *,2 as rn from B
) as t1
order by 企业编码,rn desc,领票日期
[/quote] 谢谢您了,非常感谢。能给我解释下吗?
LongRui888 2014-01-03
  • 打赏
  • 举报
回复
引用 3 楼 bdbody 的回复:
rn 能给隐藏什么的吗?别让他出现?
试试这样:
select 企业编码,企业名称,领购日期,领购数量
from (
    select *,1 as rn from A
    union all
    select *,2 as rn from B
) as t1
order by 企业编码,rn desc,领票日期
bdbody 2014-01-03
  • 打赏
  • 举报
回复
rn 能给隐藏什么的吗?别让他出现?
bdbody 2014-01-03
  • 打赏
  • 举报
回复
引用 1 楼 AcHerat 的回复:

select *
from (
    select *,1 as rn from A
    union all
    select *,2 as rn from B
) as t1
order by 企业编码,rn desc,领票日期
您能解释下吗?见笑了,新手。。。。。。
AcHerat 元老 2014-01-03
  • 打赏
  • 举报
回复

select *
from (
    select *,1 as rn from A
    union all
    select *,2 as rn from B
) as t1
order by 企业编码,rn desc,领票日期

34,588

社区成员

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

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