我有以下查询
SELECT u.Unit, ut.Month, ut.Num , ut.Denom
FROM Unit u
INNER JOIN UnitTest ut ON u.Id = ut.UnitId
这给出了以下结果:
Unit Month Num Denom
1 March 123 50
1 April 325 60
1 May 653 59
2 March 656 68
2 April 469 98
还有更多的单位从月份开始 - 十月。
如何将数据显示为:
Unit Jan Feb March April May June....
1 2.46 5.41..............
2 .....................................
它显示月份(总是1月 - 12月,年份无关紧要,因为它已经过滤)作为标题并显示分子和分母的相应分割计算?
答案 0 :(得分:1)
这样的事情应该有效。我已使用SUM()
进行汇总,但您可能希望使用AVG
或MIN
或MAX
,具体取决于您的业务逻辑。
SELECT
Unit,
SUM(CASE Month WHEN 'Jan' THEN CAST(Num AS DECIMAL(10, 2))/Denom ELSE 0 END),
SUM(CASE Month WHEN 'Feb' THEN CAST(Num AS DECIMAL(10, 2))/Denom ELSE 0 END),
...
FROM
Unit U
INNER JOIN UnitTest UT ON
U.Id = UT.UnitId
GROUP BY
Unit
此外,您可能希望在查询中使用列时包含表别名。它使事情变得更加清晰。
答案 1 :(得分:0)
如果使用PIVOT
运算符,则需要在CTE /派生表中执行Num/Denom
,然后进行数据透视。
WITH T
AS (SELECT Unit,
[Month],
CAST(Num AS FLOAT) / Denom AS Val
FROM Unit u
INNER JOIN UnitTest ut
ON u.Id = ut.UnitId)
SELECT *
FROM T PIVOT (MAX(Val) FOR [Month] IN ([March], [April] /*...*/) ) AS PVT