2016-04-27 184 views
1

我試圖衡量一些銷售數據隨時間的增長。我組的電流和以前一起銷售基於最後N個月,得到以下(略)表:基於其他列值劃分列值

+-------------------------------+---------------+-------------+ 
| CUSTOMER_NAME     | TIMEFRAME  | GROSS_SALES | 
+-------------------------------+---------------+-------------+ 
| SALLY'S SALES INC    | CURRENT  |  1207.76 | 
| SALLY'S SALES INC    | PREVIOUS  |  8139.49 | 
| DAVES PRODUCTS LLC   | CURRENT  |  909.92 | 
| DAVES PRODUCTS LLC   | PREVIOUS  |  2867.41 | 
| MEGACORP      | CURRENT  |  8369.05 | 
| MEGACORP      | PREVIOUS  | 19123.75 | 
+-------------------------------+---------------+-------------+ 

我試圖計算當前和以前的銷售之間的商,像

+-------------------------------+----------------+ 
| CUSTOMER_NAME     | SALES_FACTOR | 
+-------------------------------+----------------+ 
| SALLY'S SALES INC    | 0.148382761082 | 
| DAVES PRODUCTS LLC   | 0.317331668649 | 
| MEGACORP      | 0.690302092999 | 
+-------------------------------+----------------+ 

但是,我無法弄清楚正確地將每個客戶名稱的兩個值分開的查詢。

回答

0

您可以使用GROUP BY每個客戶得到一排,然後SUM(CASE)挑出來當前和以前的值。

這樣做的好處是隻掃描一次表格而不需要連接。

SELECT 
    CUSTOMER_NAME, 
    SUM(CASE WHEN TIMEFRAME = 'CURRENT' THEN GROSS_SALES END) 
/
    SUM(CASE WHEN TIMEFRAME = 'PREVIOUS' THEN GROSS_SALES END) AS SALES_FACTOR 
FROM 
    yourTable 
GROUP BY 
    CUSTOMER_NAME 
+0

完美 - 謝謝! –

0

用不同的名稱使用表兩次......

select CUSTOMER_NAME, t1.TIMEFRAME/t2.TIMEFRAME 
    from TABLE_NAME as t1, TABLE_NAME as t2 
where t1.CUSTOMER_NAME = t2.CUSTOMER_NAME 
    and t1.TIMEFRAME = 'PREVIOUS' 
    and t2.TIMEFRAME = 'CURRENT' 
0

一種方法是使用有條件聚集:

select customer_name, 
     (max(case when time_frame = 'Current' then gross_sales end)/
     max(case when time_frame = 'Previous' then gross_sales end) 
     ) as ratio 
from t 
group by customer_name; 
+0

++ ..!請你看看[這個](http://stackoverflow.com/questions/36897213/how-can-i-break-selecting-when-condition-is-false)? – stack