【问题标题】:Group a pivoted table分组透视表
【发布时间】:2016-06-01 15:33:44
【问题描述】:

我想按两个范围对下表进行分组。为此,我旋转了表格,但它显示了一些 NULL 字段。如何对表格进行分组,使其仅显示非空值?

这是 SQL 查询:

SELECT RangoCuotas, [0   -21  ],[21  -42  ],[42  -79  ],[79  -158 ],[158  -9999]
FROM(
    SELECT IdTasaSeguro, Valor, CONVERT(CHAR(4),MontoMinimo)+'-'+CONVERT(CHAR(4),MontoMaximo) AS RangoMonto, CONVERT(CHAR(4),CASE WHEN CuotaMin = 0 THEN 1 ELSE CuotaMin END)+'-'+CONVERT(CHAR(4),CuotaMax) AS RangoCuotas
    FROM [BEFE_SistemaGestionMDP].[dbo].[TasaSeguro]
    WHERE IdTipoSeguro = 1
) AS SourceTable
PIVOT 
(
SUM(Valor) FOR RangoMonto IN ([0   -21  ],[21  -42  ],[42  -79  ],[79  -158 ],[158 -9999])
) AS PivotTable1
GROUP BY RangoCuotas,[0   -21  ],[21  -42  ],[42  -79  ],[79  -158 ],[158 -9999]

【问题讨论】:

  • 只是猜测一下,从您的子查询中删除IdTasaSeguro。你没有在你的数据透视中使用它,所以它很可能会强制多行,也可以在你透视后摆脱额外的组,你不需要它。

标签: sql-server sql-server-2008-r2 group-by pivot-table


【解决方案1】:

如果您将 SELECT * 用于主要的 SELECT 语句,那么您将看到原因。

解决方案:从(...) SourceTable 派生表中删除不必要的列(例如IdTasaSeguro

FROM(
    SELECT 
        Valor, 
        CONVERT(CHAR(4),MontoMinimo)+'-'+CONVERT(CHAR(4),MontoMaximo) AS RangoMonto, 
        CONVERT(CHAR(4),CASE WHEN CuotaMin = 0 THEN 1 ELSE CuotaMin END)+'-'+CONVERT(CHAR(4),CuotaMax) AS RangoCuotas
    FROM [BEFE_SistemaGestionMDP].[dbo].[TasaSeguro]
    WHERE IdTipoSeguro = 1
) AS SourceTable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    相关资源
    最近更新 更多