大家好,我有下一个查询
DECLARE @fechaInicio AS VARCHAR(10)
DECLARE @fechaFin AS VARCHAR(10)
DECLARE @codGestor AS VARCHAR(10)
DECLARE @codSponsor AS VARCHAR(10)
DECLARE @codProducto AS VARCHAR(10)
SET @fechaInicio = '20140101'
SET @fechaFin = '20141231'
SET @codGestor = 'BDOBRASIL'
SET @codSponsor = 'MARCH'
SET @codProducto = 8
SELECT
COUNT(crt_numinterno_id) * 100.00 / pnc_cantidad AS Ventas,
prd_descripcion,
DATENAME(MM, crt_fecinivige) + ' ' + CAST(YEAR(crt_fecinivige) AS VARCHAR(4)) AS crt_fecinivige,
C.prd_producto_id,pnc_cantidad
FROM Certificados C
INNER JOIN Penetracion P
ON C.ges_gestor_id = P.ges_gestor_id
AND C.spo_sponsor_id = P.spo_sponsor_id
AND C.prd_producto_id = P.prd_producto_id
LEFT JOIN Productos R
ON C.ges_gestor_id = R.ges_gestor_id
AND C.spo_sponsor_id = R.spo_sponsor_id
AND C.prd_producto_id = R.prd_producto_id
WHERE C.ges_gestor_id = @codGestor
AND C.spo_sponsor_id = @codSponsor
AND (@codProducto = '' OR @codProducto = C.prd_producto_id)
AND crt_fechabaja IS NULL
AND crt_fecinivige BETWEEN @fechaInicio AND @fechaFin
GROUP BY
pnc_cantidad,
prd_descripcion,
DATENAME(MM, crt_fecinivige),
YEAR(crt_fecinivige),
DATEPART(yyyy,crt_fecinivige),
C.prd_producto_id,
DATEPART(m,crt_fecinivige)
ORDER BY
DATEPART(yyyy,crt_fecinivige),
DATEPART(m,crt_fecinivige)
我得到下一个结果检查图像
一切都很好但我9月只得到Ventas
而我的老板希望查看@fechaInicio
和@fechaFin
之间的所有月份,而且我不知道如何将所有月份分组
答案 0 :(得分:1)
您可以使用公用表表达式生成一个包含月份序列的表,然后使用该表继续加入查询。在此示例中,我使用20140101
作为确定范围开始的日期。请试一试。
;WITH cte (dt) AS (
SELECT DATEADD(MONTH, v.number, '20140101')
FROM master..spt_values v
WHERE
v.number >= 0 AND
v.number < 12 AND
v.type = 'p'
)
SELECT
Ventas,
prd_descripcion,
COALESCE(crt_fecinivige, DATENAME(MM, dt) + ' ' + CAST(YEAR(dt) AS VARCHAR(4))),
prd_producto_id,
pnc_cantidad
FROM cte c
LEFT JOIN (
SELECT
COUNT(crt_numinterno_id) * 100.00 / pnc_cantidad AS Ventas,
prd_descripcion,
DATENAME(MM, crt_fecinivige) + ' ' + CAST(YEAR(crt_fecinivige) AS VARCHAR(4)) AS crt_fecinivige,
C.prd_producto_id,
pnc_cantidad
FROM Certificados C
INNER JOIN Penetracion P
ON C.ges_gestor_id = P.ges_gestor_id
AND C.spo_sponsor_id = P.spo_sponsor_id
AND C.prd_producto_id = P.prd_producto_id
LEFT JOIN Productos R
ON C.ges_gestor_id = R.ges_gestor_id
AND C.spo_sponsor_id = R.spo_sponsor_id
AND C.prd_producto_id = R.prd_producto_id
WHERE C.ges_gestor_id = @codGestor
AND C.spo_sponsor_id = @codSponsor
AND (@codProducto = '' OR @codProducto = C.prd_producto_id)
AND crt_fechabaja IS NULL
AND crt_fecinivige BETWEEN @fechaInicio AND @fechaFin
GROUP BY
pnc_cantidad,
prd_descripcion,
DATENAME(MM, crt_fecinivige),
YEAR(crt_fecinivige),
DATEPART(yyyy,crt_fecinivige),
C.prd_producto_id,
DATEPART(m,crt_fecinivige)
) a ON c.dt = a.crt_fecinivige
ORDER BY
DATEPART(yyyy,crt_fecinivige) DESC,
DATEPART(m,crt_fecinivige) DESC