我有一个查询(并按参数接收 2 个日期,即@DataDe=01/01/2021 和 @DataAte=18/05/2021),我想获取所有不同的值,不同值出现的总次数以及该值相对于所有值的百分比...
我的数据(一些值):
处理 | 数据 |
---|---|
Proposta | 2021-05-05 |
Proposta | 2021-03-30 |
Proposta | 2021-03-31 |
裁决 | 2021-04-05 |
Proposta | 2021-04-12 |
联系方式 | 2021-04-29 |
联系方式 | 2021-04-30 |
Proposta | 2021-05-14 |
Perdido | 2021-04-14 |
还有我的查询:
SELECT Processo, dtmInicio
FROM (SELECT (SELECT strDescricao FROM dbo.Tbl_Erm_ProcessoNegocio WITH (NOLOCK)
WHERE (intCodProcesso = cp.intEstado)) AS Processo, cp.dtmInicio FROM dbo.Tbl_Clientes_Potenciais AS cp WITH (NOLOCK) INNER JOIN
dbo.Tbl_Moedas AS Moeda WITH (NOLOCK) ON Moeda.strAbreviatura = 'EUR' LEFT OUTER JOIN
dbo.Tbl_Gce_Vendedores ON cp.intCodVendedor = dbo.Tbl_Gce_Vendedores.intCodigo LEFT OUTER JOIN
dbo.Tbl_Clientes AS cl WITH (NOLOCK) ON cp.intCodCliente = cl.intCodigo
WHERE (cp.dtmInicio >= @DataDe) AND (cp.dtmInicio < DATEADD(day, 1, @DataAte)) AND (cp.bitConvContacto = 0) AND (cp.bitConvCliente = 0)) AS Tabela
根据这些数据和查询,我开发了这个查询和这个输出:
SELECT Processo, COUNT(Processo) AS Total
FROM (SELECT (SELECT strDescricao FROM dbo.Tbl_Erm_ProcessoNegocio WITH (NOLOCK)
WHERE (intCodProcesso = cp.intEstado)) AS Processo, cp.dtmInicio
FROM dbo.Tbl_Clientes_Potenciais AS cp WITH (NOLOCK) INNER JOIN
dbo.Tbl_Moedas AS Moeda WITH (NOLOCK) ON Moeda.strAbreviatura = 'EUR' LEFT OUTER JOIN
dbo.Tbl_Gce_Vendedores ON cp.intCodVendedor = dbo.Tbl_Gce_Vendedores.intCodigo LEFT OUTER JOIN
dbo.Tbl_Clientes AS cl WITH (NOLOCK) ON cp.intCodCliente = cl.intCodigo
WHERE (cp.dtmInicio >= @DataDe) AND (cp.dtmInicio < DATEADD(day, 1, @DataAte)) AND (cp.bitConvContacto = 0) AND (cp.bitConvCliente = 0)) AS Tabela
GROUP BY Processo
这是输出数据
处理 | 总计 |
---|---|
Proposta | 5 |
裁决 | 1 |
联系方式 | 2 |
Perdido | 1 |
但我想添加一列,每行的百分比,相对于总数..是这样的:
处理 | 总计 | % |
---|---|---|
Proposta | 5 | 56% |
裁决 | 1 | 11% |
联系方式 | 2 | 22% |
Perdido | 1 | 11% |
由于所有数据都是根据收到的参数生成的,我无法提前知道我会有多少行,你们有什么帮助或想法吗?
答案 0 :(得分:0)
我的方法如下(SQL Fiddle 供参考):
WITH final AS (
SELECT
Processo,
COUNT(*) AS Total,
(SELECT COUNT(*) FROM your_data) AS Total_Sum
FROM your_data
GROUP BY 1, 3
)
select
*,
CONCAT(ROUND(Total / Total_Sum * 100, 2), '%') AS percentage_total
from final;
名为 Total_Sum
的子查询将让您有一个额外的列,其中包含 Processo
的总数,这将让您将每个组划分为总数,从而获取比例:)>
输出:
Processo Total percentage_total
---------------- ----- ----------------
Proposta 5 55.56%
Adjudicado 1 11.11%
Contacto Inicial 2 22.22%
Perdido 1 11.11%