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

求帮忙解决一SQL查询语句有关问题,该有关问题肯能比较复杂,多谢大家

2012-08-14 
求帮忙解决一SQL查询语句问题,该问题肯能比较复杂,谢谢大家。CREATE TABLE `TEST` (`tb` VARCHAR(50) ,`cha

求帮忙解决一SQL查询语句问题,该问题肯能比较复杂,谢谢大家。
CREATE TABLE `TEST` (
`tb` VARCHAR(50) ,
`chan` INT ,
`chanone` INT ,
`chantwo` INT ,
`class` INT ,
`name` VARCHAR (100)
); 
INSERT INTO TEST VALUES('13511' , 135, 1 , 1 , 1 , '中国');
INSERT INTO TEST VALUES('13522', 135 , 2 , 2 , 2 , '浙江');
INSERT INTO TEST VALUES('13523', 135 , 2 , 3 , 2 , '湖南');
INSERT INTO TEST VALUES('13542', 135 , 4 , 2 , 3 , '杭州');
INSERT INTO TEST VALUES('13543' , 135 , 4 , 3 , 3 , '长沙');
INSERT INTO TEST VALUES('13611', 136 , 1 , 1 , 1 , '美国');
INSERT INTO TEST VALUES('13622', 136 , 2 , 2, 2 , '加州1');
INSERT INTO TEST VALUES('13623', 136 , 2 , 3 , 2 , '加州2');
INSERT INTO TEST VALUES('13644', 136 , 4 , 4 , 3 , '老加');
INSERT INTO TEST VALUES('13645', 136 , 4 , 5 , 3 , '小加');
数据:
tb chan chanone chantwo class nm 
13511 135 1 1 1 中国
13522 135 2 2 2 浙江
13523 135 2 3 2 湖南
13542 135 4 2 3 杭州
13543 135 4 3 3 长沙
13611 136 1 1 1 美国
13622 136 2 2 2 加州1
13623 136 2 3 2 加州2
13644 136 4 4 3 老加
13645 136 4 5 3 小加


根据同一chan下的class的级别来显示结果的,tb是唯一的,但是不是主键。tb是chan和chanone chantwo三个字段的结合。
class 1 中国
class 2 中国-湖南
class 3 中国-湖南-长沙

要求显示的结果: 
tb chan chanone chantwo class nm 
13511 135 1 1 1 中国
13522 135 2 2 2 中国-浙江
13523 135 2 3 2 中国-湖南
13542 135 4 2 3 中国-浙江-杭州
13543 135 4 3 3 中国-湖南-长沙
13611 136 1 1 1 美国
13622 136 2 2 2 美国-加州1
13623 136 2 3 2 美国-加州2
13642 136 4 2 3 美国-加州1-老加
13643 136 4 3 3 美国-加州2-小加


[解决办法]
SQL Server 2008测试通过,2000不可以

SQL code
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'TEST')BEGIN    DROP TABLE TESTENDGOCREATE TABLE TEST (tb VARCHAR(50) ,chan INT ,chanone INT ,chantwo INT ,class INT ,name VARCHAR (100));  INSERT INTO TEST VALUES('13511' , 135, 1 , 1 , 1 , '中国');INSERT INTO TEST VALUES('13522', 135 , 2 , 2 , 2 , '浙江');INSERT INTO TEST VALUES('13523', 135 , 2 , 3 , 2 , '湖南');INSERT INTO TEST VALUES('13542', 135 , 4 , 2 , 3 , '杭州');INSERT INTO TEST VALUES('13543' , 135 , 4 , 3 , 3 , '长沙');INSERT INTO TEST VALUES('13611', 136 , 1 , 1 , 1 , '美国');INSERT INTO TEST VALUES('13622', 136 , 2 , 2, 2 , '加州1');INSERT INTO TEST VALUES('13623', 136 , 2 , 3 , 2 , '加州2');INSERT INTO TEST VALUES('13644', 136 , 4 , 2 , 3 , '老加');INSERT INTO TEST VALUES('13645', 136 , 4 , 3 , 3 , '小加');GOSELECT tb, chan, chanone, chantwo, class, stuff(( select '-'+ Name                 from TEST AS A                where B.chan = A.chan AND (B.chantwo = A.chantwo OR A.chantwo = 1) AND B.class >= A.class for xml path('')),1,1,'') as nmFROM TEST AS Btb    chan    chanone    chantwo    class    nm13511    135    1    1    1    中国13522    135    2    2    2    中国-浙江13523    135    2    3    2    中国-湖南13542    135    4    2    3    中国-浙江-杭州13543    135    4    3    3    中国-湖南-长沙13611    136    1    1    1    美国13622    136    2    2    2    美国-加州113623    136    2    3    2    美国-加州213644    136    4    2    3    美国-加州1-老加13645    136    4    3    3    美国-加州2-小加 

热点排行