3

我在查询中有以下输出。如何在不汇总列的情况下调整sql数据

SKILL            LEVEL   SCORERANGE 
----------------------------------------------------------------------------- 
Stunts            LOW   0.0 - 4.0 
Stunts            MED   3.0 - 7.0 
Stunts            HI    6.0 - 10.0 
Pyramids           LOW   0.0 - 4.0 
Pyramids           MED   3.0 - 7.0 
Pyramids           HI    6.0 - 10.0 
Tosses            LOW   0.0 - 4.0 
Tosses            MED   3.0 - 7.0 
Tosses            HI    6.0 - 10.0 
Standing Tumbling         LOW   0.0 - 4.0 
Standing Tumbling         MED   3.0 - 7.0 
Standing Tumbling         HI    6.0 - 10.0 
Running Tumbling         LOW   0.0 - 4.0 
Running Tumbling         MED   3.0 - 7.0 
Running Tumbling         HI    6.0 - 10.0 
Jumps            LOW   0.0 - 4.0 
Jumps            MED   3.0 - 7.0 

我想在不汇总任何东西的情况下将这些数据排除在外。所以,我想只显示一个每个技能行和枢轴的水平,这样的结果......

SKILL            LOWRANGE  MEDRANGE  HIRANGE 
Stunts            0.0 - 4.0  3.0 - 7.0  6.0 - 10.0 
Pyramids           0.0 - 4.0  3.0 - 7.0  6.0 - 10.0 
Tosses            0.0 - 4.0  3.0 - 7.0  6.0 - 10.0 
Standing Tumbling         0.0 - 4.0  3.0 - 7.0  6.0 - 10.0 
Running Tumbling         0.0 - 4.0  3.0 - 7.0  6.0 - 10.0 
... 

我有基本的支点语法的一个很好的理解,但我与这一个,因为挣扎结果集中没有任何要聚合的内容。

为了给你的东西来尝试解决我...

SELECT SKILL, LOWRANGE, MEDRANGE, HIRANGE 
FROM (SELECT SKILL, [LEVEL], SCORERANGE FROM ScoreRanges) ps 
PIVOT 
    (
     MAX(SCORERANGE) --THIS IS PROBABLY WRONG 
     FOR SCORERANGE IN 
     (
      --SOMETHING GOES HERE 
     ) 
    ) as pvt 

感谢您的帮助。

赛斯

回答

4

当你知道你将只有每SKILL, LEVEL组合1列,您可以使用MaxMin

SELECT SKILL, [LOW] LOWRANGE, [MED] MEDRANGE, [HI] HIRANGE 
FROM (SELECT SKILL, [LEVEL], SCORERANGE FROM ScoreRanges) ps 
PIVOT (
     MAX(SCORERANGE) 
     FOR LEVEL IN ([LOW], [MED], [HI]) 
    ) as pvt 
1

你几乎得到它的权利

SELECT SKILL, LOW as LOWRANGE, MED as MEDRANGE, HI as HIRANGE 
FROM (SELECT SKILL, [LEVEL], SCORERANGE FROM ScoreRanges) ps 
PIVOT 
    (
     MAX(SCORERANGE) 
     FOR [LEVEL] IN 
     (
      [LO], [HIGH], [MED] 
     ) 
    ) as pvt 

下面是一个例子你可以在Adventureworks数据库中运行,所以你可以玩这个也看看如何PIVOT工作

SELECT City, F AS Females, M AS Males 
FROM(
SELECT Gender,City 
FROM HumanResources.Employee AS e 
    INNER join HumanResources.EmployeeAddress AS ea 
    ON e.EmployeeID = ea.EmployeeID 
    INNER join Person.Address AS p 
    ON ea.AddressID = p.AddressID 
    ) AS pivTemp 
PIVOT 
( COUNT(Gender) 
    FOR Gender IN (F,M) 
) AS pivTable 

我也有反璞归真PIVOT例子在这里:Three different ways of populating variables with configuration values in SQL Server

相关问题