【问题标题】:Pivot/aggregation with percentage columns possible in t-sql?在 t-sql 中可以使用百分比列进行透视/聚合?
【发布时间】:2011-05-19 19:25:24
【问题描述】:

在 SQL Server 中有点挣扎,有什么想法吗?给定这些数据(ID 是 INT,其余是 BIT):

------------------------------------------
ID   Type1   Type2   AttrA   AttrB   AttrC
------------------------------------------
1    1       0       1       0       0
2    1       0       1       0       0
3    1       1       0       1       1
4    0       1       1       1       0
5    1       1       1       1       0

我想制作这份报告:

---------------------------------------------------------
Attr    NumOfType1   PctOfType1   NumOfType2   PctOfType2
---------------------------------------------------------
AttrA   3            75%          2            67%
AttrB   2            50%          3            100%
AttrC   1            25%          1            33%
Total   4            N/A          3            N/A

谢谢!

吉姆

【问题讨论】:

    标签: sql-server tsql pivot aggregation


    【解决方案1】:
    ;WITH YourBaseTable AS
    (
    SELECT 1 ID, 1 Type1,0 Type2, 1 AttrA, 0 AttrB, 0 AttrC UNION ALL
    SELECT 2 ID, 1 Type1,0 Type2, 1 AttrA, 0 AttrB, 0 AttrC  UNION ALL
    SELECT 3,1,1,0,1,1 UNION ALL
    SELECT 4,0,1,1,1,0 UNION ALL
    SELECT 5,1,1,1,1,0 
    ), T AS
    (
    SELECT *, 1 AS Total
    FROM YourBaseTable
    )
    SELECT 
    Attr,
     COUNT(CASE WHEN VALUE = 1 AND Type1 = 1 THEN 1 END) NumOfType1, 
     CASE WHEN Attr <> 'Total' THEN 100 * CAST(COUNT(CASE WHEN VALUE = 1 AND Type1 = 1 THEN 1 END) AS FLOAT)/COUNT(CASE WHEN Type1 = 1 THEN 1 END) END PctOfType1, 
     COUNT(CASE WHEN VALUE = 1 AND Type2 = 1 THEN 1 END) NumOfType2,
     CASE WHEN Attr <> 'Total' THEN 100 * CAST(COUNT(CASE WHEN VALUE = 1 AND Type2 = 1 THEN 1 END) AS FLOAT)/COUNT(CASE WHEN Type2 = 1 THEN 1 END) END PctOfType2
    FROM T
    UNPIVOT
    (VALUE FOR Attr IN (AttrA, AttrB,AttrC, Total)) AS unpvt
    GROUP BY Attr
    

    【讨论】:

    • 酷,谢谢!我能做些什么来帮助澄清逻辑?是百分比列吗(那些看起来很棘手)?百分比是给定类型/属性的数量除以该类型的总数。在我上面的示例数据中,有 4 条 Type1 记录和 3 条 Type2 记录。我在想也许是一个 WITH 查询来获取总数,它可以用来计算百分比?不确定。
    • @Jim - 现在应该将其纳入我的回答中。
    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2015-09-23
    • 2017-01-19
    • 2015-03-07
    相关资源
    最近更新 更多