读书人

主从表数据查询,该怎么处理

发布时间: 2013-07-24 14:36:29 作者: rapoo

主从表数据查询


表A:
ID Name 分类 启用
1 name1 null 0
2 name2 null 0
3 name3 null 0
4 name4 分类1 1
5 name5 null 0
6 name6 null 0
7 name7 分类3 1
8 name8 null 0
9 name9 分类2 1
10 name10 null 0


表B:
ID 分类 分类名称
1 分类1 分类名称1-1
2 分类1 分类名称1-2
3 分类1 分类名称1-3
4 分类2 分类名称2-1
5 分类2 分类名称2-2
6 分类3 分类名称3-1
7 分类3 分类名称3-2
8 分类3 分类名称3-3

当表A中有分类,同时启用=1时,查询表B相应的分类信息,显示分类名称;
(假如表A中的分类值是动态分配的,又如何去做呢?写游标?)

得到结果:
IDName
1name1
2name2
3name3
4分类名称1-1
5分类名称1-2
6分类名称1-3
7name5
8name6
9分类名称3-1
10分类名称3-2
11分类名称3-3
12name8
13分类名称2-1
14分类名称2-2
15name10

[解决办法]

with tb(ID,Name,分类,启用)as(
select 1,'name1',null,0 union
select 2,'name2',null,0 union
select 3,'name3',null,0 union
select 4,'name4','分类1',1 union
select 5,'name5',null,0 union
select 6,'name6',null,0 union
select 7,'name7','分类3',1 union
select 8,'name8',null,0 union


select 9,'name9','分类2',1 union
select 10,'name10',null,0)
,tc(ID,分类,分类名称)as(
select 1,'分类1','分类名称1-1' union
select 2,'分类1','分类名称1-2' union
select 3,'分类1','分类名称1-3' union
select 4,'分类2','分类名称2-1' union
select 5,'分类2','分类名称2-2' union
select 6,'分类3','分类名称3-1' union
select 7,'分类3','分类名称3-2' union
select 8,'分类3','分类名称3-3')
select id=row_number()over(order by tb.id,ISNULL(分类名称,name)),
ISNULL(分类名称,name) from tb full join tc on tb.分类=tc.分类


[解决办法]
if OBJECT_ID('Test1', 'u') is not null
drop table Test1
Create Table Test1
(
ID int primary key not null,
Name Varchar(64) not null,
Sort1 varchar(64) null,
IsUsed int not null
)
Insert into Test1
Select 1 , 'name1', 'null' , 0
Union all
Select 2 , 'name2' , null , 0
Union all
Select 3 , 'name3' , null , 0
Union all
Select 4 , 'name4' , '分类1' , 1
Union all
Select 5 , 'name5' , null , 0
Union all
Select 6 , 'name6' , null , 0
Union all
Select 7 , 'name7' , '分类3' , 1
Union all
Select 8 ,'name8' , null , 0
Union all
Select 9 ,'name9' , '分类2' , 1
Union all
Select 10 ,'name10' , null , 0

if OBJECT_ID('Test2', 'u') is not null
drop table Test2
Create Table [Test2]
(
ID int primary key not null,
Sort1 varchar(64) not null,
SortName Varchar(128) not null
)
Insert into [Test2]
Select
1 , '分类1' , '分类名称1-1'
Union all
Select 2 , '分类1' , '分类名称1-2'
Union all
Select 3 , '分类1' , '分类名称1-3'


Union all
Select 4 , '分类2' , '分类名称2-1'
Union all
Select 5 , '分类2' , '分类名称2-2'
Union all
Select 6 , '分类3' , '分类名称3-1'
Union all
Select 7 , '分类3' , '分类名称3-2'
Union all
Select 8 , '分类3' , '分类名称3-3' ;
with a as
(
Select Test1.Name , Test2.SortName
From Test1 Left Outer Join Test2 On Test1.Sort1 =Test2.Sort1
)
Select case when SortName IS null then Name else SortName end
From a

读书人网 >SQL Server

热点推荐