SQL - Necesito Ideas

 
Vista:

Necesito Ideas

Publicado por Isabel (7 intervenciones) el 13/01/2003 22:15:12
Hola, tengo un query donde me gustaría seleccionar la suma de varias filas (de tipo varchar) para asignarlas a una sola variable....igual como se hace con un recordset....
Me han dicho que podría hacerce con cursores, existe alguna otra forma???

De ser con cursores, me podrían dar un ejemplo?
Gracias.
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

RE:Necesito Ideas

Publicado por Isaías Islas (5072 intervenciones) el 13/01/2003 23:19:04
Isabel

Si no es lo que usted espera, por favor deme mas datos para intentar ayudarle:

-- Creo mi tabla temporal (Supongo que es la suya)
CREATE TABLE #MisSumas (col1var varchar(10), col2var varchar(10), col3var varchar(10))
-- Inserto mis registros de prueba
INSERT INTO #MisSumas VALUES(1,2,3)
INSERT INTO #MisSumas VALUES(4,5,6)
INSERT INTO #MisSumas VALUES(7,8,9)
INSERT INTO #MisSumas VALUES(10,11,12)
INSERT INTO #MisSumas VALUES(13,14,15)
-- DECLARO MI CURSOR Y COLOCO LOS REGISTROS
DECLARE @MyCursor AS CURSOR, @MiVar1 varchar(10), @MiVar2 varchar(10), @MiVar3 varchar(10), @MiUltimoValor varchar(10)
SET @MiUltimoValor = 0
-- LLENO MI CURSOR CON LOS DATOS
SET @MyCursor = CURSOR FOR
SELECT col1var, col2var, col3var
FROM #MisSumas
-- ABRO MI CURSOR
OPEN @MyCursor
IF @@cursor_rows <> 0
BEGIN
FETCH NEXT FROM @MyCursor into @MiVar1, @MiVar2, @MiVar3
WHILE @@Fetch_Status = 0
BEGIN
SET @MiUltimoValor = @MiUltimoValor+ CONVERT(INT,@MiVar1)+CONVERT(INT,@MiVar2)+CONVERT(INT,@MiVar3)
FETCH NEXT FROM @MyCursor into @MiVar1, @MiVar2, @MiVar3
END
END
-- CIERRO Y DESALOJO MI CURSOR DE LA MEMORIA, ELIMINO MI TABLA TEMPORAL
CLOSE @MyCursor
DEALLOCATE @MyCursor
DROP TABLE #MisSumas
-- DESPLIEGO MI SUMA FINAL
SELECT 'MI SUMA ES:', @MiUltimoValor

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

RE:Necesito Ideas

Publicado por Isabel (7 intervenciones) el 13/01/2003 23:36:59
Hola Isaías, he visto tu respuesta y me han buenas ideas.
Pero intuyo que mi problema debe ser muy sencillo de resolver sino que lo he explicado mal.
Se trata de lo sgt.

Tengo dos tablas A y B, donde B guarda detalles de A, es decir la correspondencia de A a B es de 1 a muchos; entonces, cuando hago un select ..join entre A y B me devuelve n registros (según la cantidad de detalles que existan en B). Lo que yo quiero es que me devuelva UN solo registro por cada fila en A y que la columna que tomo de B (que es de tipo varchar) se concatene para cada registro de A.
Es decir, ahora tengo esto

A.Columna1 B.Columna1
1 "rojo"
1 "amarillo"
1 "verde"

Lo que quiero es:

A.Columna1 Columna
1 rojoamarilloverde

Creo que ahora está más claro.

Muchísimas gracias por tu ayuda,
Saludos.
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

RE:Necesito Ideas

Publicado por Isaías Islas (5072 intervenciones) el 14/01/2003 00:24:52
Codigo corregido:

-- Creo mi tabla temporal (Supongo que es la suya)
CREATE TABLE #MisColores (ID int, MyColor varchar(15))
CREATE TABLE #MisColoresFinales (ID int, MyColorFina varchar(800))
-- Inserto mis registros de prueba
INSERT INTO #MisColores VALUES(1,'rojo')
INSERT INTO #MisColores VALUES(1,'azul')
INSERT INTO #MisColores VALUES(1,'amarillo')
INSERT INTO #MisColores VALUES(2,'magenta')
INSERT INTO #MisColores VALUES(2,'blanco')
INSERT INTO #MisColores VALUES(3,'rosa')
INSERT INTO #MisColores VALUES(3,'lila')
INSERT INTO #MisColores VALUES(3,'gris')
-- DECLARO MI CURSOR Y COLOCO LOS REGISTROS
DECLARE @MyCursor AS CURSOR, @MiID int, @MiColor varchar(15), @MiUltimoValor varchar(800), @MyInd int
SET @MiUltimoValor = ''
-- LLENO MI CURSOR CON LOS DATOS
SET @MyCursor = CURSOR FOR
SELECT ID, MyColor
FROM #MisColores
-- ABRO MI CURSOR
OPEN @MyCursor
IF @@cursor_rows <> 0
BEGIN
FETCH NEXT FROM @MyCursor into @MiID, @MiColor
WHILE @@Fetch_Status = 0
BEGIN
SELECT 'PRIMER WHILE'
SET @MyInd = @MiID
WHILE @MyInd = @MiID AND @@Fetch_Status <> -1
BEGIN
SELECT 'SEGUNDO WHILE'
SET @MiUltimoValor = @MiUltimoValor+@MiColor
FETCH NEXT FROM @MyCursor into @MiID, @MiColor
END
INSERT INTO #MisColoresFinales VALUES(@MyInd, @MiUltimoValor)
SET @MiUltimoValor = ''
END
END
-- CIERRO Y DESALOJO MI CURSOR DE LA MEMORIA, ELIMINO MI TABLA TEMPORAL
INSERT INTO #MisCol
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

RE:Necesito Ideas

Publicado por EDELRIO (540 intervenciones) el 14/01/2003 02:23:03
Excelente Isaias!!!
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

RE:Necesito Ideas

Publicado por Isaías Islas (5072 intervenciones) el 14/01/2003 03:28:02
Favor de colocar un

SET NOCOUNT ON

Al principio de este script, eliminar los mensajes:

SELECT 'PRIMER WHILE'
SELECT 'SEGUNDO WHILE'

Ya que los coloque para "debuggear" y coloco lo ultimo que no llego:

-- CIERRO Y DESALOJO MI CURSOR DE LA MEMORIA, ELIMINO MI TABLA TEMPORAL
CLOSE @MyCursor
DEALLOCATE @MyCursor
SELECT * FROM #MisColoresFinales
DROP TABLE #MisColoresFinales
DROP TABLE #MisColores

Saludos.
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

RE:Necesito Ideas

Publicado por Isabel (7 intervenciones) el 14/01/2003 14:38:02
Ok, muchas gracias, ya lo estoy probando.

Saludos.
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