sql Создать идентификатор индекса в качестве нового столбца для сортировки категорий дел, которые я только что создал Sql сервер - PullRequest
0 голосов
/ 28 января 2020

Я бы хотел создать столбец SortID для сортировки результатов по различным категориям дел. Каждая категория дел представляет диапазон доходов. Я сгруппировал результаты по заявлениям, чтобы получить количество заказов для каждого случая. Теперь я застрял с этой проблемой создания SortID. Ниже, пожалуйста, найдите мой текущий запрос. Пожалуйста, предложите мне, где я могу поместить заявление о создании индекса в моем запросе. Большое спасибо заранее!

select SalesAmountCategory, count(*) as Orders 
from
    (Select case
            when ((SalesAmount-TaxAmt-Freight)>=100000) then '>$100000'
            when ((SalesAmount-TaxAmt-Freight)>=50000) then '$50000-$100000'
            when ((SalesAmount-TaxAmt-Freight)>=10000) then '$10000-$50000'
            when ((SalesAmount-TaxAmt-Freight)>=5000) then '$5000-$10000'
            when ((SalesAmount-TaxAmt-Freight)>=2500) then '$2500-$5000'
            when ((SalesAmount-TaxAmt-Freight)>=1000) then '$1000-$2500'
            when ((SalesAmount-TaxAmt-Freight)>=500) then '$500-$1000'
            when ((SalesAmount-TaxAmt-Freight)>=100) then '$100-$500'
            when ((SalesAmount-TaxAmt-Freight)<100) then '$0-$100'
            end as SalesAmountCategory
        From  dbo.FactResellerSales 
        where OrderDate BETWEEN '2010-01-01 00:00:00.000' AND '2010-12-31 23:59:59.999'
    ) as t
    group by SalesAmountCategory
    order by SalesAmountCategory;

Ниже приведен пример ожидаемого результата

Result Example

Ответы [ 2 ]

1 голос
/ 28 января 2020

Я бы использовал apply вместо подзапроса, вы можете использовать row_number для создания sortid:

select row_number() over (order by min(SalesAmount - TaxAmt - Freight)) as sortid,
       SalesAmountCategory, count(*) as Orders
from dbo.FactResellerSales frs cross apply
     ( values (case when (SalesAmount - TaxAmt - Freight) >= 100000 then '>$100000'
                    when (SalesAmount - TaxAmt - Freight) >= 50000) then '$50000-$100000'
                    . . .
                    when (SalesAmount - TaxAmt - Freight) < 100 then '$0-$100'
               end)
     ) frss(SalesAmountCategory)
where OrderDate BETWEEN '2010-01-01 00:00:00.000' AND '2010-12-31 23:59:59.999'
group by SalesAmountCategory;
0 голосов
/ 28 января 2020

Вместо упорядочения по категориям, упорядочите по минимальной сумме в каждой категории:

select row_number() over (order by min(SalesAmount-TaxAmt-Freight)) as sortid,
. . . 
order by min(SalesAmount-TaxAmt-Freight)

Конечно, вам нужно будет выбрать эти столбцы также в подзапросе (или выполнить расчет в подзапрос).

...