我目前正在运行查询:
select table1.columnA as Barrier_1,
table2.columnB as Action_1,
from table2
join table1 on table2.PrimKey = table1.PrimKey
where table1.columnA is not null
and table2.columnB is not null
group by table1.columnA, table2.columnB
order by table1.columnA
返回表格:
Barrier_1 Action_1
____________________
01 | 01
01 | 02
02 | 01
02 | 03
02 | 04
03 | 02
03 | 03
04 | 01
05 | 04
我想要它做的是计算每个障碍的每个动作的百分比:
Barrier_1 Action_1 Percent_1
________________________________
01 | 01 | 60%
01 | 02 | 40%
02 | 01 | 20%
02 | 03 | 10%
02 | 04 | 70%
03 | 02 | 20%
03 | 03 | 80%
04 | 01 | 100%
05 | 04 | 100%
请注意,每个操作可以显示多个时间障碍。
所以每个障碍都有它自己的一系列动作。例如,屏障一个可以总共有5个动作(2个是动作02,3个是动作01)。
答案 0 :(得分:0)
您可以使用子查询获取一个Actions
的所有Barrier
的总和。然后计算一个Actions
的{{1}}百分比。
Barrier
此处指向SQL Fiddle的链接,其中包含我用于测试的数据...
如果您想在结果列中添加'%' - 符号,则需要将百分比值转换为SELECT b.ColumnA
, a.ColumnB
, ROUND(CONVERT(DECIMAL(19,4),
COUNT(a.ColumnB))* 100/
CONVERT(DECIMAL(19,4),
(SELECT COUNT(ColumnB) FROM Action WHERE PrimKey=b.PrimKey))
, 2) AS Pros
FROM Action a
INNER JOIN Barrier b ON b.PrimKey=a.PrimKey
GROUP BY b.ColumnA, a.ColumnB, b.PrimKey
ORDER BY b.ColumnA
并添加符号。
VARCHAR
答案 1 :(得分:0)
有许多不同的方法可以解决这个问题。以下是我认为最直接的例子:
SELECT table1.columnA as Barrier_1,
table2.columnB as Action_1,
ROUND(CAST(COUNT(*) AS FLOAT)
/CAST( (SELECT COUNT(*) FROM table2 t2
WHERE t2.PrimKey = table1.PrimKey)
AS FLOAT)*100,2) AS Percent_1
from table2
join table1 on table2.PrimKey = table1.PrimKey
where table1.columnA is not null
and table2.columnB is not null
group by table1.columnA, table2.columnB
order by table1.columnA
如果要添加百分比符号,则必须在结尾处转换为varchar。
注意:我在示例中转换为float类型,如果您需要高精度的数字,最好使用数字/小数类型