如何在同一列

时间:2015-06-19 19:03:51

标签: mysql sql

我正在尝试分裂"计数"。除法的要求是值应具有相同的批次ID和Carry首字母缩略词。除数应该是" Dental -NEBD"的计数值。并且股息应该是#34;从批次中添加"。

我该怎么做?

这是一个数据样本:

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

2 个答案:

答案 0 :(得分:0)

这样的事情应该有效。您可以创建一个临时表来加入并准确选择您需要的内容。事务后将删除临时表。这将采用您当前的表(在问题中)并将其复制到临时表。然后它将根据条件(匹配Batch和匹配的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%';

答案 1 :(得分: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;