2015-08-28 44 views
-1

我有一個海量數據拉,我有四個鍵我想特別能夠排序。T-SQL頂部X,所有其他 - 多個約束

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

從本質上講,每個THERAPEUTIC_CLASS,我希望能夠通過總和(PATIENT_PRICE)中拉頂級X(其中X將分別爲每THERAPEUTIC_CLASS定義)SPEEDCODES(必須以字母數字字符開始)一個與之前的星期一至星期日(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 /空值。我只想讓代碼捕獲以字母數字開頭的東西,而我的代碼捕獲非字母數字速度碼。 –

回答

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