none
Suma de columnas en tablas pivot RRS feed

  • Pregunta

  • Buen día, 

    Estoy haciendo un query en SQL Server 2008 r2 , que debe mostrarme la suma de varias columnas, 
    Tengo columna del 2019-01 y todas las cantidades sobre varias cuentas y quisiera que aparezca las cuentas y el total sobre esas cuentas que pertenecen a la columna 2019-01 y así con la otra columna 2019-02

    Tengo este query 

    DECLARE @FECHA NVARCHAR(25) SET @FECHA = '2019/01'
    SELECT 
    	CASE 
            WHEN (SEGMENT_0 + '-' + SEGMENT_1 + '-' + SEGMENT_2) = '--' THEN (SELECT ACCTCODE) 
            WHEN (SEGMENT_0 + '-' + SEGMENT_1 + '-' + SEGMENT_2) IS NULL THEN (SELECT ACCTCODE) 
            ELSE (SELECT (SEGMENT_0 + '-' + SEGMENT_1 + '-' + SEGMENT_2)) 
        END [Cuenta], AcctName, Levels, Frozen,
        STR(Round(ISNULL((SELECT SUM(T2.Debit - T2.Credit) FROM JDT1 T2 WITH(NOLOCK) WHERE T2.Account = T1.AcctCode AND convert(varchar(7), T2.RefDate ,111)<=@FECHA),0),2,0),15,2)[Saldo Final]
    FROM OACT T1 
    WHERE 
    	CONVERT(NVARCHAR(25), T1.CreateDate, 111)<=@FECHA
    	AND Levels > 3
    ORDER BY AcctCode, acctname 
    union all
    SELECT * FROM JDT1 T2
    PIVOT
    (
    	SUM(Account)
    	FOR Year IN ([@FECHA]) -- sale error en el Year 
    	--FOR [@ANIO] IN ([01],[02]) 
    ) AS pt
    GO

    Me sale error cuando quiero pivotear la tabla, espero me puedan ayudar, gracias.

    Saludos.

    sábado, 2 de marzo de 2019 19:00

Respuestas

Todas las respuestas

  • Deleted
    sábado, 2 de marzo de 2019 22:24
  • Deleted
    domingo, 3 de marzo de 2019 0:17
  • Hola,

    Muchas gracias por el código, efectivamente me ayudo, solo le cambie algunas cosas.
    Ahora solo quiero preguntar, cuando tenga mas meses solo le voy declarando los meses y colocando de esta forma 

    COALESCE (SUM (CASE WHEN MONTH (T2.RefDate) = 1 THEN (T2.Debit - T2.Credit) END), 0) [2019-01],               
    COALESCE (SUM (CASE WHEN MONTH (T2.RefDate) = 2 THEN (T2.Debit - T2.Credit) END), 0) [2019-02],
    COALESCE (SUM (CASE WHEN MONTH (T2.RefDate) = 2 THEN (T2.Debit - T2.Credit) END), 0) [2019-03]

    Así consecutivamente hasta los 12 meses del año.

    Gracias José Diz

    lunes, 4 de marzo de 2019 15:52
  • Deleted
    • Marcado como respuesta Cashmere VM lunes, 4 de marzo de 2019 16:50
    lunes, 4 de marzo de 2019 16:47
  • Excelente, 

    Muchas gracias por tu colaboración.

    Saludos

    lunes, 4 de marzo de 2019 16:51
  • Buenas tardes, 

    Tengo una pregunta más. Obtengo los datos que necesito con el código que me pasaste, gracias por eso, pero ahora resulta que necesito que me visualice el mes de enero y sus datos, mes de febrero con datos y así hasta el mes actual, en caso de que muestre la columna de un mes después al actual que lo muestre null o en 0, tengo este código


    DECLARE @FechaInicial DATE, @FechaFinal DATE 
    SET DATEFORMAT dmy
    SET @FechaInicial = CAST ('1/1/2019' AS DATE)
    SET @FechaFinal = CAST ('31/1/2019' AS DATE)
    
    DECLARE @FechaIniFeb DATE, @FechaFinFeb DATE 
    SET DATEFORMAT dmy
    SET @FechaIniFeb = CAST ('1/2/2019' AS DATE)
    SET @FechaFinFeb = CAST ('28/2/2019' AS DATE)
    
    DECLARE @FechaIniMzo DATE, @FechaFinMzo DATE 
    SET DATEFORMAT dmy
    SET @FechaIniMzo = CAST ('1/3/2019' AS DATE)
    SET @FechaFinMzo = CAST ('31/3/2019' AS DATE)
    
    DECLARE @FechaIniAbril DATE, @FechaFinAbril DATE 
    SET DATEFORMAT dmy
    SET @FechaIniAbril = CAST ('1/4/2019' AS DATE)
    SET @FechaFinAbril = CAST ('30/4/2019' AS DATE)
    
    DECLARE @FechaIniMay DATE, @FechaFinMay DATE 
    SET DATEFORMAT dmy
    SET @FechaIniMay = CAST ('1/5/2019' AS DATE)
    SET @FechaFinMay = CAST ('31/5/2019' AS DATE)
    
    DECLARE @FechaIniJun DATE, @FechaFinJun DATE 
    SET DATEFORMAT dmy
    SET @FechaIniJun = CAST ('1/6/2019' AS DATE)
    SET @FechaFinJun = CAST ('30/6/2019' AS DATE)
    
    DECLARE @FechaIniJuly DATE, @FechaFinJuly DATE 
    SET DATEFORMAT dmy
    SET @FechaIniJuly = CAST ('1/7/2019' AS DATE)
    SET @FechaFinJuly = CAST ('31/7/2019' AS DATE)
    
    DECLARE @FechaIniAgo DATE, @FechaFinAgo DATE 
    SET DATEFORMAT dmy
    SET @FechaIniAgo = CAST ('1/8/2019' AS DATE)
    SET @FechaFinAgo = CAST ('31/8/2019' AS DATE)
    
    DECLARE @FechaIniSep DATE, @FechaFinSep DATE 
    SET DATEFORMAT dmy
    SET @FechaIniSep = CAST ('1/9/2019' AS DATE)
    SET @FechaFinSep = CAST ('30/9/2019' AS DATE)
    
    DECLARE @FechaIniOct DATE, @FechaFinOct DATE 
    SET DATEFORMAT dmy
    SET @FechaIniOct = CAST ('1/10/2019' AS DATE)
    SET @FechaFinOct = CAST ('31/10/2019' AS DATE)
    
    DECLARE @FechaIniNov DATE, @FechaFinNov DATE 
    SET DATEFORMAT dmy
    SET @FechaIniNov = CAST ('1/11/2019' AS DATE)
    SET @FechaFinNov = CAST ('30/11/2019' AS DATE)
    
    DECLARE @FechaIniDic DATE, @FechaFinDic DATE 
    SET DATEFORMAT dmy
    SET @FechaIniDic = CAST ('1/12/2019' AS DATE)
    SET @FechaFinDic = CAST ('31/12/2019' AS DATE);
    
    --
    WITH
    -- Transformación
    OACT_cuenta AS 
    (
    	SELECT AcctCode, AcctName, Levels, Frozen, CreateDate,
    		CASE WHEN (COALESCE (Segment_0, '') + COALESCE (Segment_1, '') + COALESCE (Segment_2, '')) = ''
                 THEN AcctCode
            ELSE (COALESCE (Segment_0, '') + '-' + COALESCE (Segment_1, '') + '-' + COALESCE (Segment_2, ''))
    		END [Cuenta]
    	FROM OACT t1
    )
    --
    SELECT T1.Cuenta [Cuenta], T1.AcctName, T1.Levels, T1.Frozen,
         STR(ROUND(ISNULL((SELECT SUM (T2.Debit - T2.Credit) FROM JDT1 T2 WITH(NOLOCK) WHERE T2.Account = T1.AcctCode 
         AND CONVERT(DATE, T2.RefDate, 111)<= @FechaFinal),0),2,0),15,2) [2019-01], --BETWEEN @FechaInicial AND @FechaFinal),0),2,0),15,2) [2019-01],
         
         STR(ROUND(ISNULL((SELECT SUM(T2.Debit - T2.Credit) FROM JDT1 T2 WITH(NOLOCK) WHERE T2.Account = T1.AcctCode 
         AND CONVERT(DATE, T2.RefDate, 111)<= @FechaFinFeb),0),2,0),15,2) [2019-02],
         
         STR(ROUND(ISNULL((SELECT SUM (T2.Debit - T2.Credit) FROM JDT1 T2 WITH(NOLOCK) WHERE T2.Account = T1.AcctCode 
         AND CONVERT(DATE, T2.RefDate, 111)<= @FechaFinMzo),0),2,0),15,2) [2019-03],
         
         STR(ROUND(ISNULL((SELECT SUM(T2.Debit - T2.Credit) FROM JDT1 T2 WITH(NOLOCK) WHERE T2.Account = T1.AcctCode 
         AND CONVERT(DATE, T2.RefDate, 111)<= @FechaFinAbril),0),2,0),15,2) [2019-04],
         
         STR(ROUND(ISNULL((SELECT SUM (T2.Debit - T2.Credit) FROM JDT1 T2 WITH(NOLOCK) WHERE T2.Account = T1.AcctCode 
         AND CONVERT(DATE, T2.RefDate, 111)<= @FechaFinMay),0),2,0),15,2) [2019-05],
         
         STR(ROUND(ISNULL((SELECT SUM(T2.Debit - T2.Credit) FROM JDT1 T2 WITH(NOLOCK) WHERE T2.Account = T1.AcctCode 
         AND CONVERT(DATE, T2.RefDate, 111)<= @FechaFinJun),0),2,0),15,2) [2019-06],     
         
         STR(ROUND(ISNULL((SELECT SUM(T2.Debit - T2.Credit) FROM JDT1 T2 WITH(NOLOCK) WHERE T2.Account = T1.AcctCode 
         AND CONVERT(DATE, T2.RefDate, 111)<= @FechaFinJuly),0),2,0),15,2) [2019-07],
         
         STR(ROUND(ISNULL((SELECT SUM (T2.Debit - T2.Credit) FROM JDT1 T2 WITH(NOLOCK) WHERE T2.Account = T1.AcctCode 
         AND CONVERT(DATE, T2.RefDate, 111)<= @FechaFinAgo),0),2,0),15,2) [2019-08],
         
         STR(ROUND(ISNULL((SELECT SUM(T2.Debit - T2.Credit) FROM JDT1 T2 WITH(NOLOCK) WHERE T2.Account = T1.AcctCode 
         AND CONVERT(DATE, T2.RefDate, 111)<= @FechaFinSep),0),2,0),15,2) [2019-09],
         
         STR(ROUND(ISNULL((SELECT SUM (T2.Debit - T2.Credit) FROM JDT1 T2 WITH(NOLOCK) WHERE T2.Account = T1.AcctCode 
         AND CONVERT(DATE, T2.RefDate, 111)<= @FechaFinOct),0),2,0),15,2) [2019-10],
         
         STR(ROUND(ISNULL((SELECT SUM(T2.Debit - T2.Credit) FROM JDT1 T2 WITH(NOLOCK) WHERE T2.Account = T1.AcctCode 
         AND CONVERT(DATE, T2.RefDate, 111)<= @FechaFinNov),0),2,0),15,2) [2019-11],
         
         STR(ROUND(ISNULL((SELECT SUM(T2.Debit - T2.Credit) FROM JDT1 T2 WITH(NOLOCK) WHERE T2.Account = T1.AcctCode 
         AND CONVERT(DATE, T2.RefDate, 111)<= @FechaFinDic),0),2,0),15,2) [2019-12]     
         
    FROM OACT_cuenta T1 
    WHERE T1.CreateDate <= @FechaFinal
         AND T1.Levels > 3
    ORDER BY Cuenta, AcctName


    Osea si quiero declarar las fechas y así como lo tengo pero en el caso de ahora en el mes de abril en adelante muestre null o 0 y solo me muestre los meses anteriores hasta el mes actual. Así cuando estemos en Junio, me muestre Enero, Feb, Marzo, Abril, Mayo y mes actual, con sus respectivos datos del mes

    Espero me haya dado a entender.

    Gracias

    • Editado Cashmere VM miércoles, 6 de marzo de 2019 22:26
    miércoles, 6 de marzo de 2019 22:24
  • Deleted
    • Marcado como respuesta Cashmere VM jueves, 7 de marzo de 2019 15:23
    miércoles, 6 de marzo de 2019 23:02
  • Era lo que buscaba, muchas gracias José Diz
    jueves, 7 de marzo de 2019 15:23