日期:2014-05-18  浏览次数:20592 次

求解释sql语句 急
DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
INSERT @t SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'

--深度排序显示处理
--生成每个节点的编码累计(相同当单编号法的编码)
DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
DECLARE @Level int
SET @Level=0
INSERT @t_Level SELECT ID,@Level,ID
FROM @t
WHERE PID IS NULL
WHILE @@ROWCOUNT>0
BEGIN
  SET @Level=@Level+1
  INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
  FROM @t a,@t_Level b
  WHERE a.PID=b.ID
  AND b.Level=@Level-1
END

--显示结果
SELECT SPACE(b.Level*2)+'|--'+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort
/*--结果
|--山东省
  |--烟台市
  |--招远市
  |--青岛市
|--四会市
  |--清远市
  |--小分市
--*/

中b.sort是什么意思 和b.Sort+a.ID什么意思还有为什么a.ID=b.ID

------解决方案--------------------
SELECT SPACE(b.Level*2)+'|--'+a.Name
FROM @t a,@t_Level b
WHERE a.ID=b.ID
ORDER BY b.Sort


@t a,意思是 给@t 取一个别名为 a 这 a就等于@t
@t_level b 的意思同上

b.sort 是指 @t_level这个表中的 sort字段
a.ID 就是 @t表中的id字段
a.id = b.id 查询条件 这2个表中的id字段值相等的 数据