今天回看以前的SQL语句.在下面的条件里面有些不太明白.在注释的地方有几个地方不明白意思了.麻烦讲解一下select top 100 percent *,
rn=row_number() over(partition by Numbers,convert(varchar(10),排序时间,120) order by 排序时间)
from
(
select *,
case when
(select count(*) from AttendanceTimeRecords a --这里把AttendanceTimeRecords指别名为a
where  
a.numbers=AttendanceTimeRecords.numbers --条件立即就这样指定.这里让我感觉自己指定到自己的意思.
and a.SwipeDateTime<= AttendanceTimeRecords.SwipeDateTime --这里也是一样.难道这个这个a成临时表了吗?
--不明白这里的作用.
)%2=0
and NOT exists (
select * from 
AttendanceTimeRecords a --又是指定别名为a
where  
a.numbers=AttendanceTimeRecords.numbers--感觉又是自己指定自己,为啥要这样做,作用是什么呢?在这里我看起来a变成临---时表了.难道别名可以作临时表的吗?
 and a.SwipeDateTime< AttendanceTimeRecords.SwipeDateTime and
datediff(day,a.SwipeDateTime,AttendanceTimeRecords.SwipeDateTime)=0
)
then   dateadd(mi,-1,convert(varchar(10),SwipeDateTime,120))
else  SwipeDateTime end as 排序时间
 from AttendanceTimeRecords
) b
order by numbers,SwipeDateTime

解决方案 »

  1.   


    select top 100 percent *,
    rn=row_number() over(partition by Numbers,convert(varchar(10),排序时间,120) order by 排序时间)
    from
    (
    select *,
      case when
       (select count(*) from AttendanceTimeRecords a --这里把AttendanceTimeRecords指别名为a
         where  
           a.numbers=AttendanceTimeRecords.numbers  --AttendanceTimeRecords的表指的是 倒数第三行的那个表   --条件立即就这样指定.这里让我感觉自己指定到自己的意思.  
           and a.SwipeDateTime<= AttendanceTimeRecords.SwipeDateTime --这里也是一样.难道这个这个a成临时表了吗?
           --不明白这里的作用.
       )%2=0
       and NOT exists (
         select * from AttendanceTimeRecords a --又是指定别名为a  --这个A和上面的那个A是不同的
          where  
             a.numbers=AttendanceTimeRecords.numbers  --这个同上面的用法  --感觉又是自己指定自己,为啥要这样做,作用是什么呢?在这里我看起来a变成临---时表了.难道别名可以作临时表的吗?
             and a.SwipeDateTime< AttendanceTimeRecords.SwipeDateTime and
             datediff(day,a.SwipeDateTime,AttendanceTimeRecords.SwipeDateTime)=0
       )
     then  dateadd(mi,-1,convert(varchar(10),SwipeDateTime,120))
     else  SwipeDateTime end as 排序时间
     
     from AttendanceTimeRecords
    ) b
    order by numbers,SwipeDateTime
      

  2.   


    select count(*) from AttendanceTimeRecords a --这里把AttendanceTimeRecords指别名为a
         where  
           a.numbers=AttendanceTimeRecords.numbers  --AttendanceTimeRecords的表指的是 倒数第三行的那个表   --条件立即就这样指定.这里让我感觉自己指定到自己的意思.  
           and a.SwipeDateTime<= AttendanceTimeRecords.SwipeDateTime --这里也是一样.难道这个这个a成临时表了吗?
           --不明白这里的作用. --这个语句块的查询出符合条件的记录数跟2去余数,比较余数是不是等于0
      

  3.   


    select * from AttendanceTimeRecords a --又是指定别名为a  --这个A和上面的那个A是不同的
          where  
             a.numbers=AttendanceTimeRecords.numbers  --这个同上面的用法  
    --感觉又是自己指定自己,为什么要这样做?
    --在这里我看起来a变成临表了,是不是这样呢?
    -如果是临时表了.难道别名可以作临时表的吗?
      

  4.   


    简单的说是自连接比如数据表T
    A B C
    1 1 2
    1 2 3
    2 2 1
    要得到A相同,B最大的所有列
    1 2 3
    2 2 1
    这时候可以这样写
    SELECT * FROM T A WHERE B=(SELECT MAX(B) FROM T WHERE A=T.A)
      

  5.   

    别名就是你父母给你起了一个名字但是现在你上csdn,大家可能叫你做'chirea' 或者 '禁用F3' 但实际这些名字无论怎么变,她都是你
      

  6.   

    我知道别名的意思SQL code
    select * from AttendanceTimeRecords a 
    --又是指定别名为a  --这个A和上面的那个A是不同的
          where  
             a.numbers=AttendanceTimeRecords.numbers 
    --这个同上面的用法  
    --感觉又是自己指定自己,为什么要这样做?
    --在这里我看起来a变成临表了,是不是这样呢?
    --如果是临时表了.难道别名可以作临时表的吗?我是想知道我注释的意思
      

  7.   

    --感觉又是自己指定自己,为什么要这样做?
    如果参与join的两个表是同一个表(自连接),则至少要给其中一个表设置别名,否则无法区分这两个表--在这里我看起来a变成临表了,是不是这样呢?
    不是临时表,可以理解为内存里,根据AttendanceTimeRecords复制了一了一个新表,不过给他重新起了个名字叫A (别名)--如果是临时表了.难道别名可以作临时表的吗?
    不是临时表
      

  8.   

    在程序中,不论数据库表也好,还是对象,都可以直接为其创建一个别名。别名(alias)就是为主对象另外创建的一个副本指针,在操作数据时,两者兼有相同的效力。数据库的表可以设置一个别名,例如你的sql代码中的表AttendanceTimeRecords叫a;C#中,string是String的别名,用string等于用String。