2015-06-19 34 views
0

我在嘗試劃分「計數」。劃分要求的值應該具有相同的批次ID和Carry首字母縮寫詞。除數應該是「牙科-NEBD」的計數值,分紅應該是「批量增加」。如何在同一列中劃分兩個值

我該怎麼做?

這裏有一個數據樣本:

Batch Carr_Acronym DATE   Count  Datatype 
45056 ARM   12/31/2014  20  Added from batch 
45056 ARM   12/31/2014  0  Deleted from batch 
45056 ARM   12/31/2014  5  Dental - NEDB 
45055 CUU   12/31/2014  0  Dental - NEDB 
+0

將有100個獨特的價值的。最終結果應該是批次ID,Carr Acyonym,日期「從批次/牙科 - NEDB百分比中添加」的表格(百分比:來自分部) –

+0

您是否事先知道批次和Carr_Acronym?或者你是否試圖從單個查詢中獲取所有結果?另外,你到目前爲止嘗試過什麼? – ragerory

+0

目前我有一個子查詢來填充上面給出的所有信息。我現在正在嘗試編寫另一個查詢,它將調用此子查詢並填充我正在查找的信息。 –

回答

0

這樣的事情應該工作。你可以創建一個臨時表來加入並選擇你所需要的。交易後臨時表將被丟棄。這會將當前表(在問題中)並將其複製到臨時表中。然後,它將基於條件(匹配批次和匹配的Carr_Acronym)將兩個表(問題中的當前問題加上新創建的臨時表)連接起來,然後在數據類型具有適當的值時對計數進行除法。

CREATE TEMPORARY TABLE IF NOT EXISTS tempTable AS (SELECT * FROM MyTable); 
SELECT (`a`.`Count`/`b`.`Count`) as `result` 
FROM MyTable `a` 
INNER JOIN tempTable `b` ON (`a`.`Batch` = `b`.`Batch`) AND (`a`.`Carr_Acronym` = `b`.`Carr_Acronym`) 
WHERE a.Datatype LIKE 'added%' AND b.Datatype LIKE 'dental%'; 
+0

我已經有一個子查詢顯示上述信息。如果我已經有了,我將如何才能獲得結果? –

+0

我不知道我在跟着......你的問題是如何劃分兩個計數,對吧?上面的查詢將執行計算'SELECT(a.Count/b.Count)as result'。我錯過了什麼嗎? – ragerory

+0

好吧,它需要劃分兩個具有特定批次ID的計數,數據類型應該從頂部的「批次」和底部的「牙科...」添加。 –

0

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

select batch, Carr_Acronym, 
     (sum(case when datatype = 'Added from batch' then count else 0 end)/
     sum(case when datatype = 'Dental - NEDB' then count end) 
     ) as ratio  
from table t 
group by batch, Carr_Acronym; 
+0

可能是最乾淨的方式,而不是'datatype ='從batch''中添加,可能會更好'datatype!='Dental - NEDB''(儘管他沒有提到非NEDB數據類型)。你也有一個尾隨的'/'? – vol7ron

+0

@ vol7ron。 。 。這個問題很明顯,應該劃分什麼。 –

+0

你是對的。我必須跳過他提到股息的最後一句話。 – vol7ron

相關問題