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

请问一个数据筛选的有关问题

2012-06-10 
请教一个数据筛选的问题我有两个表,表A和表B,其结构如下:A(ID主键)IDNameAddressClassID1-1张三武汉01231-

请教一个数据筛选的问题
我有两个表,表A和表B,其结构如下:
A(ID主键)
ID Name Address ClassID
1-1 张三 武汉 0123
1-2 王五 长沙 0123

B(Number主键)
 Number Value State
 1-1 2 0
 1-1 3 0
 1-2 2 1

数据库SQL Server2008
1、我现在需要把表A的ID,Name,ClassID和表B的Value提取出来(这两个表没有主外键关系)
2、首先检查State=0,然后提取表B的Number和Value,若1-1有多条数据,提取Value值最小那一条,按Number升序排
3、提取完表B中的数据后,根据条件Number查表A,最后返回数据

我的想法,用临时表拼接这两个表的数据,然后返回~
不知大家有何高见!
SQL用得不熟,希望高人给个demo,不胜感激~~

[解决办法]

SQL code
select a.ID,a.Name,a.ClassID,t.valuefrom A a inner join(select  Number,Value,State from(select px=row_number()over(partition by Number order by Value),* from B where State=0)s where px=1)ton t.Number=a.ID
[解决办法]
SQL code
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'A')BEGIN    DROP TABLE AENDGOCREATE TABLE A(    ID VARCHAR(10),    Name VARCHAR(10),    Address VARCHAR(10),    ClassID VARCHAR(10))GOINSERT INTO ASELECT '1-1', '张三', '武汉', '0123' UNIONSELECT '1-2', '王五', '长沙', '0123'IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'B')BEGIN    DROP TABLE BENDGOCREATE TABLE B(    Number VARCHAR(10),    Value INT,    State INT)GOINSERT INTO BSELECT '1-1', 2, 0 UNIONSELECT '1-1', 3, 0 UNIONSELECT '1-2', 2, 1GOSELECT ID,Name,ClassID,ValueFROM A,(SELECT Number,MIN(value) AS value FROM B WHERE State = 0 GROUP BY Number) AS CWHERE A.ID = C.NumberID    Name    ClassID    Value1-1    张三    0123    2
[解决办法]
SQL code
if object_id('[tb_A]') is not null drop table [tb_A]create table [tb_A]insert  [tb_A]SELECT '1-1', '张三', '武汉', '0123' UNION ALLSELECT '1-2', '王五', '长沙', '0123'if object_id('[tb_B]') is not null drop table [tb_B]create table [tb_B]INSERT  [tb_B]SELECT '1-1', 2, 0 UNION ALLSELECT '1-1', 3, 0 UNION ALLSELECT '1-2', 2, 1SELECT ID,Name,ClassID,ValueFROM tb_A,(SELECT Number,MIN(value) AS value FROM tb_B WHERE State=0 GROUP BY Number) AS tb_CWHERE tb_A.ID = tb_C.NumberID     Name    ClassID    Value1-1    张三     0123        2 

热点排行
Bad Request.