2015-08-28 2 views
-1

У меня массивное притяжение данных, и у меня есть четыре ключа, которые я хочу, чтобы сортировать, в частности.T-SQL Top X, All Other - Множественные ограничения

pk.Formula.SPEEDCODE 
pk.Formula.THERAPEUTIC_CLASS 
pk.RxFill.PATIENT_PRICE 
pk.RxFill.SHIP_DATE 

По существу, для каждого THERAPEUTIC_CLASS, я хочу, чтобы иметь возможность тянуть Top X (где X будет определен отдельно для каждого THERAPEUTIC_CLASS) SPEEDCODES (который должен начинаться с алфавитно-цифровым символом) по сумме (PATIENT_PRICE) во время определенный период времени, соответствующий предыдущей неделе понедельника-воскресенья (SHIP_DATE), а затем я хочу перечислить все остальные элементы каждого THERAPEUTIC_CLASS как «Все остальные».

Мне показалось, что я это выяснил ранее, но тянет за 6 минут, и я не хочу так долго ждать. Помогите?

Пример кода:

THERAPEUTIC_CLASS SPEEDCODE PATIENT_PRICE 
Pain    M1   500.00 
Pain    NULL  125.00 
Pain       85.00 
Pain    M1   225.00 
Pain    P3   600.00 
Pain    M1   1000.00 
Pain    P3   500.00 
Pain    P5   600.00 
Pain    NULL  85.00 
Pain    P5   450.00 
Derm    WART1  250.00 
Derm    U2   125.00 
Derm    NULL  225.00 
Derm    WART1  500.00 
Derm    U2   85.00 
Derm       50.00 

Ожидаемый результат (отсортированный):

TxClass Speedcode Revenue 
Pain  M1   1775.00 
Pain  P3   1100.00 
Pain  P5   1050.00 
Pain  All Other 295.00 
Derm  WART1  750.00 
Derm  U2   210.00 
Derm  All Other 275.00 
+0

Образец данных и ожидаемый результат в вопросе. –

+0

Итак, у вас есть рабочий код, который слишком медленный? – Blorgbeard

+0

У меня был полурабочий код, который был слишком медленным, но я взорвал его, потому что он неправильно обрабатывал значения NULL/empty. Я только хочу, чтобы код захватывал материал, который начинается с буквенно-цифрового кода, и мой код захватывал не-буквенно-цифровые коды скорости. –

ответ

0

может быть, видя выше вопрос и комментарии точно я не знаю, что точный вывод, который вы ищете. Мой предположенный ответ, если он работает для вас хорошо.

;with CTE AS (
select 
THERAPEUTIC_CLASS, 
    CASE WHEN speedcode IS NULL THEN 'All Other' 
     ELSE SpeedCode END AS SpeedCode, 
    sum(PATIENT_PRICE) As PATIENT_PRICE, 
     ROW_number()OVER(PARTITION BY THERAPEUTIC_CLASS 
      ORDER BY THERAPEUTIC_CLASS desc)RN 
    from table1 
     GROUP BY THERAPEUTIC_CLASS,speedcode) 

     Select THERAPEUTIC_CLASS, 
    SpeedCode, 
    PATIENT_PRICE 
    from CTE 
     ORDER BY THERAPEUTIC_CLASS DESC,RN DESC 

 Смежные вопросы

  • Нет связанных вопросов^_^