请问这个SQL怎么写?

TGZ 2009-03-18 10:01:16
tb1
--------------------------------------------
ITEMNO ITEMCODE ITEMNAME MEMO
1 D DDDD DDDD
2 C CCCC CCCC
3 B BBBB BBBB
4 E EEEE EEEE
.......


tb2
--------------------------------------------
ITEMCODE EX
E E1
D D1
C C1
C C2
E E1


要求结果:
--------------------------
ITEMNO ITEMCODE EX ITEMNAME MEMO
1 D DDDD DDDD
D1
2 C CCCC CCCC
C1
C2
3 B BBBB BBBB
4 E EEEE EEEE
E1
.......


要求:ITEMNO为序号,要求按以前的排序,不得改变,请问这个SQL应该如何写呢?
...全文
88 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
TGZ 2009-03-18
  • 打赏
  • 举报
回复
问题描述不对,请稳步http://topic.csdn.net/u/20090318/10/2f1b5e97-7157-4854-be49-8856e93efb80.html?seed=1733951908 另贴给分,TKS
百年树人 2009-03-18
  • 打赏
  • 举报
回复
---测试数据---
if object_id('[tb1]') is not null drop table [tb1]
go
create table [tb1]([ITEMNO] int,[ITEMCODE] varchar(1),[ITEMNAME] varchar(4),[MEMO] varchar(4))
insert [tb1]
select 1,'D','DDDD','DDDD' union all
select 2,'C','CCCC','CCCC' union all
select 3,'B','BBBB','BBBB' union all
select 4,'E','EEEE','EEEE'
if object_id('[tb2]') is not null drop table [tb2]
go
create table [tb2]([ITEMCODE] varchar(1),[EX] varchar(2))
insert [tb2]
select 'E','E1' union all
select 'D','D1' union all
select 'C','C1' union all
select 'C','C2' union all
select 'E','E1'

---查询---
select ITEMNO,ITEMCODE,EX,ITEMNAME,MEMO
from
(
SELECT
itemno as px,
CASE WHEN EX='' THEN LTRIM(ITEMNO) ELSE '' END AS ITEMNO,
CASE WHEN EX='' THEN LTRIM(ITEMCODE) ELSE '' END AS ITEMCODE,
EX,
ITEMNAME,
MEMO
FROM
(
select ITEMNO,ITEMCODE,'' as EX,ITEMNAME,MEMO from tb1
union all
select tb1.itemno,tb2.itemcode,tb2.ex,'','' from tb2 left join tb1 on tb2.itemcode=tb1.itemcode
) t) t
order by px,ex


---结果---
ITEMNO ITEMCODE EX ITEMNAME MEMO
------------ -------- ---- -------- ----
1 D DDDD DDDD
D1
2 C CCCC CCCC
C1
C2
3 B BBBB BBBB
4 E EEEE EEEE
E1
E1

(所影响的行数为 9 行)

楼主要的是这种显示格式?
jinjazz 2009-03-18
  • 打赏
  • 举报
回复

结果看不明白
htl258_Tony 2009-03-18
  • 打赏
  • 举报
回复
select 
isnull(a.ITEMNO,'') ITEMNO,isnull(a.ITEMCODE,'') ITEMCODE,isnull(b.EX,'') EX,isnull(a.ITEMNAME,'') ITEMNAME,isnull(a.MEMO,'') MEMO
from tb1 a
full join (select x.ITEMNO,ITEMCODE,y.EX from tb1 x join tb2 y on x.ITEMCODE=y.ITEMCODE) b
on a.ITEMCODE=b.ITEMCODE
百年树人 2009-03-18
  • 打赏
  • 举报
回复
---测试数据---
if object_id('[tb1]') is not null drop table [tb1]
go
create table [tb1]([ITEMNO] int,[ITEMCODE] varchar(1),[ITEMNAME] varchar(4),[MEMO] varchar(4))
insert [tb1]
select 1,'D','DDDD','DDDD' union all
select 2,'C','CCCC','CCCC' union all
select 3,'B','BBBB','BBBB' union all
select 4,'E','EEEE','EEEE'
if object_id('[tb2]') is not null drop table [tb2]
go
create table [tb2]([ITEMCODE] varchar(1),[EX] varchar(2))
insert [tb2]
select 'E','E1' union all
select 'D','D1' union all
select 'C','C1' union all
select 'C','C2' union all
select 'E','E1'

---查询---
select
a.ITEMNO,a.ITEMCODE,isnull(b.EX,'') AS EX,a.ITEMNAME,a.MEMO
from tb1 a
left join tb2 b on a.ITEMCODE=b.ITEMCODE


---结果---
ITEMNO ITEMCODE ITEMNAME MEMO
----------- -------- ---- -------- ----
1 D D1 DDDD DDDD
2 C C1 CCCC CCCC
2 C C2 CCCC CCCC
3 B BBBB BBBB
4 E E1 EEEE EEEE
4 E E1 EEEE EEEE

(所影响的行数为 6 行)

排版上不知道是不是你想要的?
肥龙上天 2009-03-18
  • 打赏
  • 举报
回复

select ITEMNO,ITEMCODE,isnull(EX,'') EX,ITEMNAME,MEMO
from tb1 left join tb2 on tb1.ITEMCODE = b.ITEMCODE
order by a.ITEMNO
dpzc_love 2009-03-18
  • 打赏
  • 举报
回复
帮顶...
百年树人 2009-03-18
  • 打赏
  • 举报
回复
select 
a.ITEMNO,a.ITEMCODE,isnull(b.EX,''),a.ITEMNAME,a.MEMO
from tb1 a
left join tb2 b on a.ITEMNO=b.ITEMNO
TGZ 2009-03-18
  • 打赏
  • 举报
回复
不好意思,刚才点提交太快,分数给少了,有结果另开贴给分,谢谢!

34,575

社区成员

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

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