2014-09-18 4 views
0

Может ли кто-нибудь помочь мне понять мой запрос? Я знаю, что это правильно, но почему-то я не знаю, как я придумал этот результат.Понимание Self Присоединиться к функции в SQL Server

Запрос:

Select 
    A.Name, A.Age, SUM(B.Age) Running_Total 
from 
    infoTbl A, infoTbl B 
Where 
    A.Age <= B.Age 
Group By 
    A.Name, A.Age 
Order By 
    A.Age Desc 

Результат:

Name Age Running Total 
--------------------------- 
A  25  25 
B  20  45 
C  18  63 
D  15  78 
E  1   79 
F  5   84 

Что такое смысл

Where A.Age <= B.Age 

Можете ли вы дать мне иллюстрацию? Огромное спасибо.

+2

Как я вижу, у получать суммы возрастов , которые равны или меньше текущего возраста. другими словами, сумма текущего и всех предыдущих возрастов. – Darka

+0

- это то, что в каждой строке, сгруппированной? – user3192219

+0

да, если я правильно понял u ... – Darka

ответ

0

Where A.Age>=B.Age введите следующую строку, которую вы хотите добавить.

вы можете использовать это вместо того, чтобы я присоединиться к

select *,sum(Age)over(order by Name) as Running_Total from table 
+0

У него есть ошибка Sir. – user3192219

1

Давайте рассмотрим ваш запрос на шаги

1.

Select 
    A.Name, A.Age, b.Name as bName, B.Age as bAge 
from 
    infoTbl A, infoTbl B 
Where 
    A.Age <= B.Age 
Order By 
    A.Age desc, B.Age 

это эквивалент

Select 
    A.Name, A.Age, b.Name as bName, B.Age as bAge 
from 
    infoTbl A 
    inner join infoTbl B on A.Age <= B.Age 
Order By 
    A.Age desc, B.Age 

Это даст вам: для ea ch в таблице A - запись в B с тем же возрастом или выше.

Name Age bName bAge 
--------------------------- 
A  25 A  25 
B  20 B  20 
B  20 A  25 
C  18 C  18 
C  18 B  20 
C  18 A  25 
... 
etc... 

когда вы теперь добавить сумму и группу, что вы получаете Isa полный возраст говорят люди, которые имеют возраст равен a.age или старше

Select 
    A.Name, A.Age, SUM(B.Age) AS Running_Total 
from 
    infoTbl A 
    inner join infoTbl B on A.Age <= B.Age 
group by 
    A.Name, A.Age 
Order By 
    A.Age desc 



Name Age Running Total 
--------------------------- 
A  25  25   (25) 
B  20  45   (20 + 25 which is age of B+A) 
C  18  63   (18 + 20 + 25 which is age of C+B+A)