急求 sql

anwsp 2009-05-25 09:56:28
A 表(本表的关键字是其他XXX,编码可以唯一标识产品)

编码 令号 数量 单价 合同号 日期
1 s123 4 13 12 2009-3-14
1 s12 4 13 12 2009-3-14
1 s122 4 13 12 2009-3-14
1 s123 4 13 12 2009-3-14

B表(编码可以唯一标识产品)

编码 令号 数量 单价 日期
1 s123 1 13 2009-3-14

结果表(明细表)(同一编码)

令号 数量 单价 合同号 | 日期 | 令号 数量 单价 日期
s123 4 13 12 |2009-3-14 |
s12 4 13 12 |2009-3-14 |
s122 4 13 12 |2009-3-14 |
s123 4 13 12 |2009-3-14 |s123 1 13 2009-3-14

能实现吗?

...全文
188 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangle861010 2009-05-26
  • 打赏
  • 举报
回复


if object_id('A') is not null
drop table A

if object_id('B') is not null
drop table B

create table A (bm int, lh varchar(20), sl int,dj int,hth int, rq smalldatetime)
insert A (bm, lh, sl, dj, hth, rq )
select 1,'s123', 4 , 13, 12, '2009-3-14' union all
select 1,'s12', 4 , 13, 12, '2009-3-14' union all
select 1,'s122', 4 , 13, 12, '2009-3-14' union all
select 1,'s123', 4 , 13, 12, '2009-3-14'

create table B (bm int, lh varchar(20), sl int,dj int, rq smalldatetime)
insert into B (bm, lh, sl, dj, rq )
select 1,'s123', 1 , 13, '2009-3-14'

SELECT ID=IDENTITY(INT,1,1),* INTO #TB FROM A
SELECT T.lh, T.sl, T.dj ,T.hth, T.rq,T1.lh ,T1.sl,T1.dj ,T1.rq
FROM #TB T LEFT JOIN B T1
ON T.bm=T1.bm
AND T.ID=4


s123 4 13 12 2009-03-14 00:00:00 NULL NULL NULL NULL
s12 4 13 12 2009-03-14 00:00:00 NULL NULL NULL NULL
s122 4 13 12 2009-03-14 00:00:00 NULL NULL NULL NULL
s123 4 13 12 2009-03-14 00:00:00 s123 1 13 2009-03-14 00:00:00




8楼的答案 应该可以实现!!!
htl258_Tony 2009-05-26
  • 打赏
  • 举报
回复
if object_id('[a]') is not null drop table [a] 
go
create table [a]([编码] int,[令号] varchar(10),[数量] int,[单价] int,[合同号] int,[日期] varchar(10))
insert [a] select 1,'s123',4,13,12,'2009-3-14'
union all select 1,'s12',4,13,12,'2009-3-14'
union all select 1,'s122',4,13,12,'2009-3-14'
union all select 1,'s123',4,13,12,'2009-3-14'
go
if object_id('[b]') is not null drop table [b]
go
create table [b]([编码] int,[令号] varchar(10),[数量] int,[单价] int,[日期] varchar(10))
insert [b] select 1,'s123',1,13,'2009-3-14'
go

--临时表处理法:
select id=identity(int),* into #a from a
select id=identity(int),* into #b from b

select a.编码,a.令号,a.数量,a.单价,a.合同号,a.日期,b.编码,b.令号,b.数量,b.单价,b.日期
from (select px=(select count(1) from #a where 编码=t.编码 and id<=t.id),* from #a t) a
full join (select px=(select count(1) from #b where 编码=t.编码 and id<=t.id),* from #b t) b
on a.px=b.px
/*
编码 令号 数量 单价 合同号 日期 编码 令号 数量 单价 日期
----------- ---------- ----------- ----------- ----------- ---------- ----------- ---------- ----------- ----------- ----------
1 s123 4 13 12 2009-3-14 1 s123 1 13 2009-3-14
1 s12 4 13 12 2009-3-14 NULL NULL NULL NULL NULL
1 s122 4 13 12 2009-3-14 NULL NULL NULL NULL NULL
1 s123 4 13 12 2009-3-14 NULL NULL NULL NULL NULL

(4 行受影响)
*/
drop table #a,#b
anwsp 2009-05-26
  • 打赏
  • 举报
回复
令号 数量 单价 合同号 | 日期 | 令号 数量 单价 日期
s123 4 13 12 |2009-3-14 |
s12 4 13 12 |2009-3-14 |
s122 4 13 12 |2009-3-14 |
s123 4 13 12 |2009-3-14 |s123 1 13 2009-3-14

能实现吗?
anwsp 2009-05-26
  • 打赏
  • 举报
回复
up
anwsp 2009-05-26
  • 打赏
  • 举报
回复
B 表中只有一行
上面的结果有两条


JonasFeng 2009-05-26
  • 打赏
  • 举报
回复
不知道楼主明白了吗?
JonasFeng 2009-05-26
  • 打赏
  • 举报
回复
/×结果
1 s123 4 13 12 2009-03-14 00:00:00 s123 1 13 2009-03-14 00:00:00
1 s12 4 13 12 2009-03-14 00:00:00 NULL NULL NULL NULL
1 s122 4 13 12 2009-03-14 00:00:00 NULL NULL NULL NULL
1 s123 4 13 12 2009-03-14 00:00:00 s123 1 13 2009-03-14 00:00:00
×/
JonasFeng 2009-05-26
  • 打赏
  • 举报
回复
if object_id('A') is not null
drop table A

if object_id('B') is not null
drop table B

create table A (bm int, lh varchar(20), sl int,dj int,hth int, rq smalldatetime)
insert A (bm, lh, sl, dj, hth, rq )
select 1,'s123', 4 , 13, 12, '2009-3-14' union all
select 1,'s12', 4 , 13, 12, '2009-3-14' union all
select 1,'s122', 4 , 13, 12, '2009-3-14' union all
select 1,'s123', 4 , 13, 12, '2009-3-14'

create table B (bm int, lh varchar(20), sl int,dj int, rq smalldatetime)
insert into B (bm, lh, sl, dj, rq )
select 1,'s123', 1 , 13, '2009-3-14'

--结果
SELECT A.*,B.lh,B.sl,B.dj,B.rq
FROM A LEFT JOIN B
ON A.lh = B.lh
htl258_Tony 2009-05-26
  • 打赏
  • 举报
回复
if object_id('[a]') is not null drop table [a] 
go
create table [a]([编码] int,[令号] varchar(10),[数量] int,[单价] int,[合同号] int,[日期] varchar(10))
insert [a] select 1,'s123',4,13,12,'2009-3-14'
union all select 1,'s12',4,13,12,'2009-3-14'
union all select 1,'s122',4,13,12,'2009-3-14'
union all select 1,'s123',4,13,12,'2009-3-14'
go
if object_id('[b]') is not null drop table [b]
go
create table [b]([编码] int,[令号] varchar(10),[数量] int,[单价] int,[日期] varchar(10))
insert [b] select 1,'s123',1,13,'2009-3-14'
go
select a.*,b.*
from a
left join b
on a.编码=a.编码 and a.令号=b.令号
/*
编码 令号 数量 单价 合同号 日期 编码 令号 数量 单价 日期
----------- ---------- ----------- ----------- ----------- ---------- ----------- ---------- ----------- ----------- ----------
1 s123 4 13 12 2009-3-14 1 s123 1 13 2009-3-14
1 s12 4 13 12 2009-3-14 NULL NULL NULL NULL NULL
1 s122 4 13 12 2009-3-14 NULL NULL NULL NULL NULL
1 s123 4 13 12 2009-3-14 1 s123 1 13 2009-3-14

(4 行受影响)
*/
anwsp 2009-05-26
  • 打赏
  • 举报
回复
这么写,如果B表中有一条记录

结果却是

令号 数量 单价 合同号 | 日期 | 令号 数量 单价 日期
s123 4 13 12 |2009-3-14 | s123 1 13 2009-3-14
s12 4 13 12 |2009-3-14 | s123 1 13 2009-3-14
s122 4 13 12 |2009-3-14 | s123 1 13 2009-3-14
s123 4 13 12 |2009-3-14 |s123 1 13 2009-3-14
JonasFeng 2009-05-26
  • 打赏
  • 举报
回复
SELECT A.*,B.令号,B.数量,B.单价,B.日期 
FROM A LEFT JOIN B
ON A.令号 = B.令号
anwsp 2009-05-26
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 htl258 的回复:]
结果应该是这样吧:
令号 数量 单价 合同号 | 日期 | 令号 数量 单价 日期
s123 4 13 12 |2009-3-14 | s123 1 13 2009-3-14
s12 4 13 12 |2009-3-14 |
s122 4 13 12 |2009-3-14 |
s123 4 13 12 |2009-3-14 |s123 1 13 2009-3-14
[/Quote]

s123 4 13 12 |2009-3-14 | s123 1 13 2009-3-14
s12 4 13 12 |2009-3-14 | s123 1 13 2009-3-14
s122 4 13 12 |2009-3-14 |
s123 4 13 12 |2009-3-14 |

当B表有两记录,上面两种显示均可

怎么 写?急!
anwsp 2009-05-26
  • 打赏
  • 举报
回复
是的,如何写呢?
htl258_Tony 2009-05-26
  • 打赏
  • 举报
回复
结果应该是这样吧:
令号 数量 单价 合同号 | 日期 | 令号 数量 单价 日期
s123 4 13 12 |2009-3-14 | s123 1 13 2009-3-14
s12 4 13 12 |2009-3-14 |
s122 4 13 12 |2009-3-14 |
s123 4 13 12 |2009-3-14 |s123 1 13 2009-3-14
anwsp 2009-05-26
  • 打赏
  • 举报
回复
up 问题还是没有解决
anwsp 2009-05-25
  • 打赏
  • 举报
回复
up
anwsp 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 needanothercoder 的回复:]
引用 9 楼 jroc123 的回复:
引用 4 楼 happyflystone 的回复:
如果B表有两条记录呢?


我的意思就显得两条,但不到该如何做?

显得什么意思?呵呵,楼主不要生气,我也想帮你,只是看不懂你的意思
[/Quote]

显示
needanothercoder 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jroc123 的回复:]
引用 4 楼 happyflystone 的回复:
如果B表有两条记录呢?


我的意思就显得两条,但不到该如何做?
[/Quote]
显得什么意思?呵呵,楼主不要生气,我也想帮你,只是看不懂你的意思
anwsp 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 happyflystone 的回复:]
如果B表有两条记录呢?
[/Quote]

我的意思就显得两条,但不到该如何做?
SQL77 2009-05-25
  • 打赏
  • 举报
回复

SELECT ID=IDENTITY(INT,1,1),* INTO #TB FROM A
SELECT T.令号, T.数量, T.单价 ,T.合同号, T.日期,T1.令号 ,T1.数量,T1. 单价 ,T1.日期
FROM #TB T LEFT JOIN B T1
ON T.编码=T1.编码
AND T.ID=4



不知道对不对??
加载更多回复(7)

34,590

社区成员

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

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