T-SQL - 计算百分比,其中分母是特定日期的所有行

如何解决T-SQL - 计算百分比,其中分母是特定日期的所有行

我正在尝试创建列来显示每一行的百分比,其中分母是给定年份中所有行的总和。

目前我创建的查询如下所示:

    SELECT
   pend,ReportingPeriod,Area,SubsCategoryId,gender,age_group,Ethnicity,AllInTx_Count,NewTx_Count
FROM
   (
      SELECT
         p.pend,p.Area,AllInTx AS AllInTx_Count,NewTx AS NewTx_Count
      FROM
         (
            SELECT
               pend,CONVERT(char(4),DATEPART(yy,pend) - 1) + '/' + RIGHT(CONVERT(char(4),pend)),2) AS ReportingPeriod,'White' AS Ethnicity,SUM(Eth_White_NewTx) AS NewTx,SUM(Eth_White_AllInTx) AS AllInTx 
            FROM
               dbo.ViewIt_Main 
            GROUP BY
               pend,age_group 
            UNION ALL
            SELECT
               pend,'Mixed/Multiple ethnic group' AS Ethnicity,SUM(Eth_Mixed_NewTx) AS NewTx,SUM(Eth_Mixed_AllInTx) AS AllInTx 
            FROM
               dbo.ViewIt_Main AS ViewIt_Main_5 
            GROUP BY
               pend,'Asian/Asian British' AS Ethnicity,SUM(Eth_Asian_NewTx) AS NewTx,SUM(Eth_Asian_AllInTx) AS AllInTx 
            FROM
               dbo.ViewIt_Main AS ViewIt_Main_4 
            GROUP BY
               pend,'Black/African/Caribbean/Black British' AS Ethnicity,SUM(Eth_Black_NewTx) AS NewTx,SUM(Eth_Black_AllInTx) AS AllInTx 
            FROM
               dbo.ViewIt_Main AS ViewIt_Main_3 
            GROUP BY
               pend,'Other ethnic group' AS Ethnicity,SUM(Eth_Other_NewTx) AS NewTx,SUM(Eth_Other_AllInTx) AS AllInTx 
            FROM
               dbo.ViewIt_Main AS ViewIt_Main_2 
            GROUP BY
               pend,age_group
         )
         AS p 
   )
   AS f

以下是显示查询当前输出的屏幕截图:

enter image description here

我需要分母是 SubsCategoryId、Area、gender 和 age_group 的给定暂挂中所有种族的总和。

像当前输出一样,我需要创建两列,一列用于 AllInTx 的比例,另一列用于 NewTx。

如何修改查询以实现此目的?

解决方法

我相当肯定,您可以通过使用 cross apply values 对数据进行逆透视,然后通过窗口函数计算比例值来解决您的问题,从而得到更简单的查询语句:


SELECT
    pend,ReportingPeriod,Area,SubsCategoryId,gender,age_group,Ethnicity,NewTx,AllInTx,-- ISNULL(NULLIF( combo catches divide by 0 errors
    ISNULL(CAST(NewTx   AS DECIMAL(19,4)) / NULLIF(SUM(NewTx) OVER (PARTITION BY pend,age_group),0),0) as NewTxProportion,ISNULL(CAST(AllInTx AS DECIMAL(19,4)) / NULLIF(SUM(AllInTx) OVER (PARTITION BY pend,0) as AllInTxProportion,FROM
    (
    SELECT
        m.pend,CONVERT(char(4),DATEPART(yy,m.pend) - 1) + '/' + RIGHT(CONVERT(char(4),m.pend)),2) AS ReportingPeriod,m.Area,m.SubsCategoryId,m.gender,m.age_group,e.Ethnicity,SUM(e.NewTx) AS NewTx,SUM(e.AllInTx) AS AllInTx 
    FROM dbo.ViewIt_Main as m
        CROSS APPLY (VALUES('White',m.Eth_White_NewTx,m.Eth_White_AllInTx),('Mixed/Multiple ethnic group',m.Eth_Mixed_NewTx,m.Eth_Mixed_AllInTx),('Asian/Asian British',m.Eth_Asian_NewTx,m.Eth_Asian_AllInTx),('Black/African/Caribbean/Black British',m.Eth_Black_NewTx,m.Eth_Black_AllInTx),('Other ethnic group',m.Eth_Other_NewTx,m.Eth_Other_AllInTx)
                    ) as e(Ethnicity,AllInTx
                          )
    GROUP BY
        m.pend,e.Ethnicity
) as d;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?