Principales respuestas
Suma de columnas en tablas pivot

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.
Respuestas
-
Deleted
- Propuesto como respuesta Pablo RubioModerator lunes, 4 de marzo de 2019 4:37
- Marcado como respuesta Cashmere VM lunes, 4 de marzo de 2019 15:11
-
Deleted
- Marcado como respuesta Cashmere VM lunes, 4 de marzo de 2019 16:50
-
Deleted
- Marcado como respuesta Cashmere VM jueves, 7 de marzo de 2019 15:23
Todas las respuestas
-
Deleted
- Propuesto como respuesta Pablo RubioModerator lunes, 4 de marzo de 2019 4:37
-
Deleted
- Propuesto como respuesta Pablo RubioModerator lunes, 4 de marzo de 2019 4:37
- Marcado como respuesta Cashmere VM lunes, 4 de marzo de 2019 15:11
-
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 formaCOALESCE (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
-
Deleted
- Marcado como respuesta Cashmere VM lunes, 4 de marzo de 2019 16:50
-
-
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
-
Deleted
- Marcado como respuesta Cashmere VM jueves, 7 de marzo de 2019 15:23
-