首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2013-07-24 
主从表数据查询表A:IDName分类启用1name1null02name2null03name3null04name4分类115name5null06name6null0

主从表数据查询


表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

热点排行