SQL Server PIVOT函数切换行,列

时间:2018-03-22 17:11:25

标签: sql-server tsql sql-server-2012

我试图用PIVOT(或其他方法)切换行和列。文档对我来说很混乱。感谢

DECLARE @CallCenterID Int;
DECLARE @BeginDateofReview SmallDateTime;
DECLARE @EndDateofReview SmallDateTime;

SELECT 
    COUNT(case when Score_Greeting = 'Yes' then Score_Greeting END) AS Score_Greeting_Passed,
    SUM(CASE WHEN Score_Greeting IS NOT NULL THEN 1 ELSE 0 END) AS Score_Greeting_Reviewed,     
    ROUND(CONVERT(decimal(4,1), (COUNT(CASE WHEN Score_Greeting = 'Yes' THEN Score_Greeting END) * 100.0) / NULLIF(SUM(CASE WHEN Score_Greeting IS NOT NULL THEN 1 ELSE 0 END),0),0),0) AS Score_Greeting_PctngPassed,  
    COUNT(CASE WHEN Score_Authentication = 'Yes' THEN Score_Authentication END) AS Score_Authentication_Passed,
    SUM(CASE WHEN Score_Authentication IS NOT NULL THEN 1 ELSE 0 END) AS Score_Authentication_Reviewed,     
    ROUND(CONVERT(decimal(4,1), (COUNT(CASE WHEN Score_Authentication = 'Yes' THEN Score_Authentication END) * 100.0) / NULLIF(SUM(CASE WHEN Score_Authentication IS NOT NULL THEN 1 ELSE 0 END), 0), 0), 0) AS Score_Authentication_PctngPassed,   
FROM 
    Calls
WHERE 
    CallCenterID = @CallCenterID AND
    (DateofReview >= @BeginDateofReview AND DateofReview <= @EndDateofReview)

期望的结果:

Score_Greeting_Passed   5
Score_Greeting_Reviewed 9
Score_Greeting_PctngPassed  56
Score_Authentication_Passed 6
Score_Authentication_Reviewed   9
Score_Authentication_PctngPassed    67

1 个答案:

答案 0 :(得分:0)

您可以使用 UNPIVOT 运算符来转置行和列。如果我们假设您的上述查询存储在@YourData中,那么它将类似于:

SELECT
    UnpivotedData.ScoreType
,   UnpivotedData.ScoreValue
FROM
    @YourData
UNPIVOT (ScoreValue FOR ScoreType IN ( [Score_Greeting_Passed], [Score_Greeting_Reviewed], [Score_Greeting_PctngPassed], 
        [Score_Authentication_Passed], [Score_Authentication_Reviewed], [Score_Authentication_PctngPassed] )) AS UnpivotedData