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

关于这段SQL是如何执行的?谢谢(主要是判断语句)
上次看到别人写得这个,无奈水平低下,看了半天运行了硬是没搞懂她的逻辑.
CREATE   TABLE   TB(id   INT,dt   INT)
INSERT   TB
SELECT   1,2
UNION   SELECT   2,19
UNION   SELECT   3,19
UNION   SELECT   4,11
UNION   SELECT   5,11
UNION   SELECT   6,12
--drop   table   tb

SELECT   ID,CNT=ISNULL((SELECT   COUNT(A.DT)   FROM   (SELECT   ID=MAX(ID),DT=MAX(DT)   FROM   TB   GROUP   BY   dt)   A   WHERE   T.ID> A.ID   AND   T.DT <> A.DT),0)+1
FROM   TB   T

执行结果是
1     1
2     2
3     2
4     3
5     3
6     4

请问它是如何运行的呢?我尤其没搞懂T.ID> A.ID   AND   T.DT <> A.DT这个判断如何执行呢?   谢谢!
最好能举例说明

------解决方案--------------------
我觉得关键是要知道每一个select的含义,你把每一个子句都执行一下看看就明白了
以下是表A的结果:
ID DT
1 2
5 11
6 12
3 19