数据透视后的 Sum Column case ()
Sum Colum case () after pivot
对不起,如果我解释得不是很好,而且标题不是很清楚。
我使用 SQL Server 2005。
我有一个使用 Pivot 的查询运行良好,但我知道我必须添加一个新查询以从每季度获取结果。
这是我从月份
获取结果的查询
WITH PivotData AS
(
SELECT idWatimetro, mes,ano, valor
FROM E_Registros_Watimetros where ano = 2012
)
SELECT *
FROM PivotData
PIVOT(SUM(valor) FOR idWatimetro IN ([1],[2],[3],[4],[5] AS P order by mes;
所以,只知道我要弄四个寄存器
1 With Month 1+2+3
2 Wint Month 4+5+6
3 With Month 7+8+9
4 Wint Month 10+11+12
我一直在尝试使用 UNION ALL 但没有像我预期的那样工作,任何帮助将不胜感激,对于我糟糕的英语和解释感到抱歉。
这是我的查询,没有结果
SELECT *
FROM (
SELECT idWatimetro, ano,mes, valor
FROM E_Registros_Watimetros
WHERE (ano = 2012 and mes = 1 ) or (ano = 2012 and mes = 2)or (ano = 2012 and mes = 3)
UNION ALL
SELECT idWatimetro, ano,mes, valor
FROM E_Registros_Watimetros
WHERE (ano = 2012 and mes = 4 ) or (ano = 2012 and mes = 5)or (ano = 2012 and mes = 6)
) AS SourceTable
PIVOT(SUM(valor) FOR idWatimetro IN ([1],[2],[3],[4],[5]))AS P
感谢先进。
尝试类似...
; WITH PivotData AS
(
SELECT idWatimetro
,CASE WHEN mes IN (1,2,3) THEN 1
WHEN mes IN (4,5,6) THEN 2
WHEN mes IN (7,8,9) THEN 3
WHEN mes IN (10,11,12) THEN 4
END AS mes
,ano
,valor
FROM E_Registros_Watimetros where ano = 2012
)
SELECT *
FROM PivotData
PIVOT(SUM(valor)
FOR Mes
IN ([1],[2],[3],[4]))p
您可以 GROUP BY
季号,即 mes - (mes - 1) % 3
,在 PIVOT
的结果集上:
WITH PivotData AS
(
SELECT idWatimetro, mes,ano, valor
FROM E_Registros_Watimetros where ano = 2012
),
PivotResult AS
(
SELECT *
FROM PivotData
PIVOT(SUM(valor) FOR idWatimetro IN ([1],[2],[3],[4],[5])) AS P
),
SELECT CASE mes - (mes - 1) % 3
WHEN 1 THEN '1st'
WHEN 4 THEN '2nd'
WHEN 7 THEN '3rd'
ELSE '4th'
END AS quarter,
2012 AS ano, sum([1]) AS [1], sum([2]) AS [2],
sum([3]) AS [3], sum([4]) AS [4], sum([5]) AS [5]
FROM PivotResult
GROUP BY mes - (mes - 1) % 3
对不起,如果我解释得不是很好,而且标题不是很清楚。 我使用 SQL Server 2005。 我有一个使用 Pivot 的查询运行良好,但我知道我必须添加一个新查询以从每季度获取结果。
这是我从月份
获取结果的查询 WITH PivotData AS
(
SELECT idWatimetro, mes,ano, valor
FROM E_Registros_Watimetros where ano = 2012
)
SELECT *
FROM PivotData
PIVOT(SUM(valor) FOR idWatimetro IN ([1],[2],[3],[4],[5] AS P order by mes;
所以,只知道我要弄四个寄存器
1 With Month 1+2+3
2 Wint Month 4+5+6
3 With Month 7+8+9
4 Wint Month 10+11+12
我一直在尝试使用 UNION ALL 但没有像我预期的那样工作,任何帮助将不胜感激,对于我糟糕的英语和解释感到抱歉。
这是我的查询,没有结果
SELECT *
FROM (
SELECT idWatimetro, ano,mes, valor
FROM E_Registros_Watimetros
WHERE (ano = 2012 and mes = 1 ) or (ano = 2012 and mes = 2)or (ano = 2012 and mes = 3)
UNION ALL
SELECT idWatimetro, ano,mes, valor
FROM E_Registros_Watimetros
WHERE (ano = 2012 and mes = 4 ) or (ano = 2012 and mes = 5)or (ano = 2012 and mes = 6)
) AS SourceTable
PIVOT(SUM(valor) FOR idWatimetro IN ([1],[2],[3],[4],[5]))AS P
感谢先进。
尝试类似...
; WITH PivotData AS
(
SELECT idWatimetro
,CASE WHEN mes IN (1,2,3) THEN 1
WHEN mes IN (4,5,6) THEN 2
WHEN mes IN (7,8,9) THEN 3
WHEN mes IN (10,11,12) THEN 4
END AS mes
,ano
,valor
FROM E_Registros_Watimetros where ano = 2012
)
SELECT *
FROM PivotData
PIVOT(SUM(valor)
FOR Mes
IN ([1],[2],[3],[4]))p
您可以 GROUP BY
季号,即 mes - (mes - 1) % 3
,在 PIVOT
的结果集上:
WITH PivotData AS
(
SELECT idWatimetro, mes,ano, valor
FROM E_Registros_Watimetros where ano = 2012
),
PivotResult AS
(
SELECT *
FROM PivotData
PIVOT(SUM(valor) FOR idWatimetro IN ([1],[2],[3],[4],[5])) AS P
),
SELECT CASE mes - (mes - 1) % 3
WHEN 1 THEN '1st'
WHEN 4 THEN '2nd'
WHEN 7 THEN '3rd'
ELSE '4th'
END AS quarter,
2012 AS ano, sum([1]) AS [1], sum([2]) AS [2],
sum([3]) AS [3], sum([4]) AS [4], sum([5]) AS [5]
FROM PivotResult
GROUP BY mes - (mes - 1) % 3