Запрос SQL Server для разряда (RowNumber) и группировок

По-моему, желательно быть максимально явным. Это добавляет ясность к коду и помогает Вашим коллегам - программистам, которые могут в конечном счете считать его.

В дополнение к (или вместо) добавление .0 к числу, можно использовать decimal.ToDouble().

Вот некоторые примеры:

// Example 1
double transperancy = trackBar1.Value/5000;
this.Opacity = decimal.ToDouble(transperancy);

// Example 2 - with inline temp
this.Opacity = decimal.ToDouble(trackBar1.Value/5000);
22
задан ekad 30 January 2017 в 06:36
поделиться

2 ответа

Используйте «Разделить по» в функции ранжирования предложение OVER

SELECT
    Rank() over (Partition by Category Order by Value, User, Category) as ranks,
    Category, User
FROM 
    Table1
Group By
    User, Category, Value 
Order by
    ranks asc
44
ответ дан 29 November 2019 в 04:23
поделиться
 Select User, Category,
     (Select Count(*) From Table 
      Where Category = A.Category 
         And Value <= A.Value) Rank
 From Table A
 Order By Category, Value

Если Value может иметь дубликаты, затем вы должны решить, хотите ли вы «подсчитывать» дубли (эквивалент RANK) или нет (эквивалент DENSE_RANK, thanx @shannon)

Обычный ранг:

 Select User, Category,
     (Select 1 + Count(*) From Table -- "1 +" gives 1-based rank, 
      Where Category = A.Category    -- take it out to get 0-based rank
         And Value < A.Value) Rank
 From Table A
 Order By Category, Value 

«Плотный» ранг:

 Select User, Category,
     (Select 1 + Count(Distinct Value) -- "1 +" gives 1-based rank, 
      From Table                       -- take it out to get 0-based rank
      Where Category = A.Category    
         And Value < A.Value) Rank
 From Table A
 Order By Category, Value
3
ответ дан 29 November 2019 в 04:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: