【问题标题】:How can this stored procedure be more elegant using unpivot这个存储过程如何使用 unpivot 更优雅
【发布时间】:2014-10-04 01:37:13
【问题描述】:

我拥有的数据格式如下:

ID          Category        Gender        Cost
1              C1             M            40
2              C2             F            50
3              C3             M            60
4              C1             F            40
5              C3             M            70
6              C3             F            50

。 . . 等等

只有 C1、C2 和 C3 作为类别存在

我需要的结果是:

Category  Male %  Female %   Avg. Cost
   C1       0.5    0.5        40
   C2       0      1          50
   C3       0.6    0.4        60

我在存储过程中所做的是我为 C1 计数、C2 计数和 C3 计数、C1 女性计数、C2 女性计数、C3 女性计数、C1 总成本、C2 总成本、C3 总成本声明了变量,你明白了。然后我计算了平均成本和男性/女性百分比。

它有效,但它不是一个非常优雅的解决方案。我无法让 unpivot 查询工作,所以它给了我需要的结果。这可以使用 unpivot 来完成,还是我误解了枢轴的工作原理?我在下面尝试了类似的方法,但不知道如何包含 M/F 百分比和每个类别的平均成本。

谢谢。

类似这样的东西(不完整):

Declare @TotalCount int;
SELECT @TotalCount = count(*) from MyTable;

SELECT Category, p.Total, CAST(p.Total * 1.0 / @TotalCount AS float) AS Percentage FROM --How to get F or M percentage, Average Cost Per Category , etc?
   (
        SELECT ISNULL(SUM(c.C1), 0) AS C1,
                      ISNULL(SUM(c.C2), 0) AS C2,
                      ISNULL(SUM(c.C3), 0) AS C3
               FROM
               (SELECT CASE WHEN Category = 'C1' THEN 1 ELSE 0 END AS C1,
                      CASE WHEN Category = 'C2' THEN 1 ELSE 0 END AS C2,
                      CASE WHEN Category = 'C3' THEN 1 ELSE 0 END AS C3
               FROM @Candidates
               ) c --Do I need
   ) a
   UNPIVOT
        (
               Total FOR Suitability IN (
                      C1,
                      C2,
                      C3
               )
        ) p

【问题讨论】:

    标签: sql tsql stored-procedures pivot


    【解决方案1】:

    请检查以下查询:

    select 
        Category,
        CAST(1.00*sum(case when Gender='M' then 1 else 0 end)/COUNT(Category) AS NUMERIC(18,1)) [Male %], 
        CAST(1.00*sum(case when Gender='F' then 1 else 0 end)/COUNT(Category) AS NUMERIC(18,1)) [Female %],  
        AVG(Cost) [Avg. Cost]
    from tbl 
    group by Category
    

    SQL Fiddle Demo

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多