2016-06-01 1 views
2

Я хочу сгруппировать следующую таблицу двумя диапазонами. Чтобы сделать это, я повернул таблицу, но он показывает мне несколько полей 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] 

Table Result

+2

Going просто сделать предположение, удалите 'IdTasaSeguro' из вашего подзапроса (бывший IdTasaSeguro.). Вы не используете его в своем стержне, поэтому он, скорее всего, заставляет несколько строк, а также избавляется от дополнительной группы после того, как вы развернете ее, вам это не нужно. – Taryn

ответ

2

Если вы будете использовать SELECT * для главного SELECT заявления, то вы увидите причину.

Решение: удалить из (...) SourceTable производной таблицы ненужных столбцов

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 
+1

Он отлично работает !, Большое спасибо! –