SQL Server - Consulta que ordena registros contables que suman 0

 
Vista:
sin imagen de perfil

Consulta que ordena registros contables que suman 0

Publicado por Nigth (4 intervenciones) el 19/12/2014 04:58:06
Hola, necesito ayuda. Tengo una consulta a una tabla con 405,168 registros, son cuentas contables y necesito que se orden de tal forma que el registro posterior sea el que tenga el mismo monto, pero diferente signo, del registro que lo antecede.

Por ejemplo:

Registro 1 ... -1250.00
Registro 2 ... 1250.00
Registro 3 ... - 345.00
Registro 4 .... 345.00

Se me ocurrió el siguiente query, el cual funcionaba con pocos registros de prueba. El problema es que hay muchos registros que coinciden con el campo cuenta y centro y se hace un cross join, haciendo una consulta que no termina nunca.
¿Qué otra alternativa puedo tomar para obtener los registros en ese orden? Tomando en cuenta que puedo llegar a tener muchos más registros.

Gracias de antemano. Saludos!

SELECT fi.[ID],
fi.[ENTITY],
fi.[JOURNALID],
fi.[CODRECON],
fi.[ACCOUNT],
fi.[SITE],
fi.[CURRENCY],
fi.[SIGN],
fi.[AMOUNT],
fi.[EFECTIVEDATE],
fi.[PUBLICATIONDATE],
fi.[PROJECT],
fi.[DESCRIPTION],
fi.[IDENTIFIER]

FROM [vwItems] AS fi
INNER JOIN [vwItems] AS ft
ON fi.[ACCOUNT] = ft.[ACCOUNT]
AND fi.[SITE] = ft.[SITE]
GROUP BY fi.[ID],
fi.[ENTITY],
fi.[JOURNALID],
fi.[CODRECON],
fi.[ACCOUNT],
fi.[SITE],
fi.[CURRENCY],
fi.[SIGN],
fi.[AMOUNT],
ft.[AMOUNT],
fi.[EFECTIVEDATE],
fi.[PUBLICATIONDATE],
fi.[PROJECT],
fi.[DESCRIPTION],
fi.[IDENTIFIER]
HAVING (fi.[AMOUNT] + ft.[AMOUNT]) = 0
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta que ordena registros contables que suman 0

Publicado por Isaias (4558 intervenciones) el 19/12/2014 17:36:10
"Dame un apoyo y moveré al mundo"

Desafortunadamente con los datos que das, creo que seria IMPOSIBLE darte una opinión.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta que ordena registros contables que suman 0

Publicado por Nigth (4 intervenciones) el 19/12/2014 20:33:08
Mmm no sé qué más datos se requieren, básicamente la cuestión es la siguiente:

Suponiendo que tienes muchos pares de registros, que al sumar una columna de los mismos (la columna de monto) te dieran 0 y te están solicitando que se ordenen de tal forma que siempre tengas el par junto, es decir el monto negativo primero y luego el monto positivo. Lo que se requiere es tener el par junto siempre, independientemente de los miles y miles de registros que puedan ser.
Esto porque el registro con monto -350, con ID 9, espera que el registro con monto 350 este justo debajo de él, pero tiene el ID 67. Entonces el problema es que no es tan fácil decirle ORDER BY ID y ya, se requiere que se ordenen por pares y esa solución que mostré no esta funcionando, tarda demasiado con miles de registros.
Las únicas condiciones para poder identificar el par, es que cuenta y centro sean iguales, el monto también pero con signo diferente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta que ordena registros contables que suman 0

Publicado por Isaias (4558 intervenciones) el 19/12/2014 20:51:32
¿Te sirvió la respuesta de Libras?

CREATE TABLE #temp(
dato INT
)


INSERT INTO #temp VALUES (-1250.00)
INSERT INTO #temp VALUES (1250.00)
INSERT INTO #temp VALUES (-345.00)
INSERT INTO #temp VALUES (345.00)
INSERT INTO #temp VALUES (100.00)
INSERT INTO #temp VALUES (-100.00)




SELECT ROW_NUMBER() OVER(partition BY nuevo ORDER BY original ASC) AS rn, original, nuevo FROM(
SELECT dato AS original,
CASE WHEN dato<0 THEN dato*-1 ELSE dato END AS nuevo FROM #temp
) AS t1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta que ordena registros contables que suman 0

Publicado por Maribel (4 intervenciones) el 22/12/2014 17:00:19
Registros Adjunto un ejemplo de los registros que muestra el query que puse en primera instancia, si se observa tienen la misma entidad, el mismo jounal id, la misma cuenta, centro y moneda, lo que cambia es el monto, que es el mismo pero con signo contrario. Y el signo, en uno es una C y en otro una D. Necesito que el registro con ID 7 salga justo después del registro con ID 1. El query que me pusieron lo probe pero lo esta ordenando, primero todos los negativos y luego todos los positivos, y así no debe de ser. Debe quedar uno negativo, uno positivo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Consulta que ordena registros contables que suman 0

Publicado por Maribel (4 intervenciones) el 22/12/2014 17:42:32
Adjunto un query que tiene datos de pruebas muy semejantes a los reales, para ver si así me explico mejor y alguien me puede ayudar con esto. Si copian y pegan esto en el Managment Studio se puede trabajar con alguna solución.

BEGIN

DECLARE @DatosPrueba TABLE([ID] BIGINT,
[ENTITY] VARCHAR(10),
[JOURNALID] VARCHAR(20),
[CODRECON] VARCHAR(20),
[ACCOUNT] VARCHAR(20),
[SITE] VARCHAR(10),
[CURRENCY] VARCHAR(3),
[SIGN] VARCHAR(1),
[AMOUNT] MONEY,
[EFECTIVEDATE] DATETIME,
[PUBLICATION] DATETIME,
[DESCRIPTION] VARCHAR(250))

INSERT @DatosPrueba VALUES(1, 'BPD', '1202232 4959817', '6120108102', '1770110420', '18888', 'DOP', 'C', -8055.00, '2012-02-22', '2012-02-23', '135-4673-163 1200108102')
INSERT @DatosPrueba VALUES(2, 'BPD', '1202232 4959817', '6120108111', '1770110420', '18888', 'DOP', 'C', -35875.00, '2012-02-22', '2012-02-23', '135-4673-166 1200108111')
INSERT @DatosPrueba VALUES(3, 'BPD', '1202232 4959817', '6120108080', '1770110420', '18888', 'DOP', 'C', -15595.00, '2012-02-22', '2012-02-23', '135-4673-169 1200108080')
INSERT @DatosPrueba VALUES(5, 'BPD', '1202232 4959817', '6120108131', '1770110420', '18888', 'DOP', 'C', -42930.00, '2012-02-22', '2012-02-23', '135-4673-158 1200108131')
INSERT @DatosPrueba VALUES(7, 'BPD', '1202232 4959817', '6120108102', '1770110420', '18888', 'DOP', 'D', 8055.00, '2012-02-22', '2012-02-23', '135-4673-163 1200108102')
INSERT @DatosPrueba VALUES(8, 'BPD', '1202232 4959817', '6120108111', '1770110420', '18888', 'DOP', 'D', 35875.00, '2012-02-22', '2012-02-23', '135-4673-166 1200108111')
INSERT @DatosPrueba VALUES(9, 'BPD', '1202232 4959817', '6120108080', '1770110420', '18888', 'DOP', 'D', 15595.00, '2012-02-22', '2012-02-23', '135-4673-169 1200108080')
INSERT @DatosPrueba VALUES(11, 'BPD', '1202232 4959817', '6120108131', '1770110420', '18888', 'DOP', 'D', 42930.00, '2012-02-22', '2012-02-23', '135-4673-158 1200108131')
INSERT @DatosPrueba VALUES(13, 'BPD', '1202232 5011260', '230212019183', '177012049934',' 18888', 'EUR', 'D', 2055.00, '2012-02-22', '2012-02-23', 'VEN 1200108049 TRNF Ref.: BPD000522747 24.TRA.EUR')
INSERT @DatosPrueba VALUES(14, 'BPD', '1202232 5011260', '230212005656', '177012049934', '18888', 'EUR', 'D', 4770.44, '2012-02-22', '2012-02-23', 'VEN 1200108263 TRNF Ref.: BPD000522803 24.TRA.EUR')
INSERT @DatosPrueba VALUES(15, 'BPD', '1202232 5011260', '230212035996', '177012049934', '18888', 'EUR', 'D', 3555.00, '2012-02-22', '2012-02-23', 'VEN 1200107723 TRNF Ref.: BPD000522669 24.TRA.EUR')
INSERT @DatosPrueba VALUES(16, 'BPD', '1202232 5011260', '230212019184', '177012049934', '18888', 'EUR', 'D', 7284.00, '2012-02-22', '2012-02-23', 'VEN 1200106867 TRNF Ref.: BPD000522530 24.TRA.EUR')
INSERT @DatosPrueba VALUES(17, 'BPD', '1202232 5011260', '230212009899', '177012049934', '18888', 'EUR', 'D', 4355.00, '2012-02-22', '2012-02-23', 'VEN 1200106399 TRNF Ref.: BPD000522463 24.TRA.EUR')
INSERT @DatosPrueba VALUES(18, 'BPD', '1202232 5011260', '230212065104', '177012049934', '18888', 'EUR', 'C', -2055.00, '2012-02-22', '2012-02-23', 'VEN 1200108049 TRNF Ref.: BPD000522747 24.TRA.EUR')
INSERT @DatosPrueba VALUES(19, 'BPD', '1202232 5011260', '230212065125', '177012049934', '18888', 'EUR', 'C', -4770.44, '2012-02-22', '2012-02-23', 'VEN 1200108263 TRNF Ref.: BPD000522803 24.TRA.EUR')
INSERT @DatosPrueba VALUES(20, 'BPD', '1202232 5011260', '230212065112', '177012049934', '18888', 'EUR', 'C', -3555.00, '2012-02-22', '2012-02-23', 'VEN 1200107723 TRNF Ref.: BPD000522669 24.TRA.EUR')
INSERT @DatosPrueba VALUES(21, 'BPD', '1202232 5011260', '230212065106', '177012049934', '18888', 'EUR', 'C', -7284.00, '2012-02-22', '2012-02-23', 'VEN 1200106867 TRNF Ref.: BPD000522530 24.TRA.EUR')
INSERT @DatosPrueba VALUES(22, 'BPD', '1202232 5011260', '230212065116', '177012049934', '18888', 'EUR', 'C', -4355.00, '2012-02-22', '2012-02-23', 'VEN 1200106399 TRNF Ref.: BPD000522463 24.TRA.EUR')
INSERT @DatosPrueba VALUES(23, 'BPD', '1202232 5011437', '6120107130', '1770110420', '18888', 'DOP', 'D', 7814.00, '2012-02-22', '2012-02-23', 'VEN 1200107130 01.EFE.USD. VALOR FORMA DE PAGO R')
INSERT @DatosPrueba VALUES(24, 'BPD', '1202232 5011437', '6120107130', '1770110420', '18888', 'DOP', 'C', -7814.00, '2012-02-22', '2012-02-23', 'VEN 1200107130 01.EFE.USD. VALOR FORMA DE PAGO R')

END

BEGIN

SELECT [ID],
[ENTITY],
[JOURNALID],
[CODRECON],
[ACCOUNT],
[SITE],
[CURRENCY],
[SIGN],
[AMOUNT],
[EFECTIVEDATE],
[PUBLICATION],
[DESCRIPTION]
FROM @DatosPrueba

END
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Consulta que ordena registros contables que suman 0

Publicado por Isaias (4558 intervenciones) el 30/12/2014 02:23:22
¿Qué hay de diferencia en el query que te dio LIBRAS?

1 -100 100
2 100 100
1 -345 345
2 345 345
1 -1250 1250
2 1250 1250
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar