2014-10-11 94 views
-2

我正在處理一組類似於以下內容的數據。使用MULTITAB的樞軸表

NAME SALETYPE UNITS 
AMBREEN SALE 98 
AMBREEN REFUND 4 
ASIF SALE 80 
ASIF REFUND 12 
ASIF SALE 56 
FARHAN REFUND 15 
FARHAN SALE 124 
FARIHA SALE 45 
FARIHA REFUND 21 
JABEEN SALE 120 
JABEEN REFUND 72 
JABEEN SALE 85 
JUNAID SALE 69 
JUNAID REFUND 8 
MUNEEB SALE 25 
MUNEEB REFUND 45 
MUNEEB SALE 12 
MUSHTAQ SALE 15 
MUSHTAQ REFUND 25 
NASIRA SALE 87 
NASIRA REFUND 23 
SADAF SALE 70 
SADAF REFUND 14 
SADAF SALE 45 
RAO SALE 100 
RAO REFUND 2 
SOHAIL REFUND 20 
SOHAIL SALE 123 

我需要得到類似於以下的結果。

NAME SALE REFUND TOTAL 
AMBREEN 98 4 102 
ASIF 80 12 92 
FARHAN 45 21 66 
FARIHA 205 72 277 
JABEEN 69 8 77 
JUNAID 37 45 82 
MUNEEB 25 15 40 
MUSHTAQ 87 23 110 
NASIRA 115 14 129 
SADAF 100 2 102 
RAO 0 20 20 
SOHAIL 123 20 143 
+1

有太多的答案繞樞軸。嘗試先搜索。提示:按'case'和'sum'來分組。 – 2014-10-11 05:19:13

+0

檢查了這個問題http://stackoverflow.com/questions/10428993/understanding-pivot-function-in-t-sql – 2014-10-11 05:21:42

+1

至少發佈RDBMS(MySQL,SQL Server,Oracle,Postgres ...)您使用和恰當地標記你的問題。 – peterm 2014-10-11 05:53:28

回答

1

這(有條件的聚合)應與所有主要的RDBMS

工作
SELECT name, sale, refund, sale + refund total 
    FROM 
(
    SELECT name, 
     SUM(CASE WHEN saletype = 'SALE' THEN units ELSE 0 END) sale, 
     SUM(CASE WHEN saletype = 'REFUND' THEN units ELSE 0 END) refund 
    FROM table1 
    GROUP BY name 
) q 
ORDER BY name 

輸出:

 
| NAME | SALE | REFUND | TOTAL | 
|---------|------|--------|-------| 
| AMBREEN | 98 |  4 | 102 | 
| ASIF | 136 |  12 | 148 | 
| FARHAN | 124 |  15 | 139 | 
| FARIHA | 45 |  21 | 66 | 
| JABEEN | 205 |  72 | 277 | 
| JUNAID | 69 |  8 | 77 | 
| MUNEEB | 37 |  45 | 82 | 
| MUSHTAQ | 15 |  25 | 40 | 
| NASIRA | 87 |  23 | 110 | 
|  RAO | 100 |  2 | 102 | 
| SADAF | 115 |  14 | 129 | 
| SOHAIL | 123 |  20 | 143 | 

這裏是SQLFiddle演示