Principales respuestas
consulta sql en 3 tablas

Pregunta
-
estimados necesito ayuda para esta consulta a 3 tablas le puedo hacer la consulta pero el lio es cuando quiero agregar una tabla mas pero esta tiene los datos de manera vertical y también quiero que estos datos se muestren horizontal hice las consultas por separado y me hago pelota cuando quiero unirlas, agradecería su colaboración al respecto.
gracias de antemano adjunto las consultas
esta consulta muestra los datos de vertical a horizontal
sudlicemp sudlifech sudlitmov sudlifapl sudlitcon sudlicorr sudlidesc sudliimpt 5213 112014 1 1 6 1 HABER GANADO 1977.8 5213 112014 1 1 11 1 BONO DE ANTIGUEDAD 216 5213 112014 1 1 6 2 HORAS EXTRAS 65.93 5213 112014 1 1 6 3 HORAS RECARGO 158.22 5213 112014 1 1 13 50 SALARIO DOMINICAL 395.56 5213 112014 1 1 13 20 BONO ESPECIAL 101.93 Select SudliCemp, SudliFech,
(select sudliimpt from sudli as s2
where s2.sudlicemp = s1.sudlicemp
and s2.SudliFech = s1.SudliFech
and s2.sudlidesc = "HABER GANADO"),
(select sudliimpt from sudli as s3
where s3.sudlicemp = s1.sudlicemp
and s3.SudliFech = s1.SudliFech
and s3.sudlidesc = "BONO DE ANTIGUEDAD"),
(select sudliimpt from sudli as s4
where s4.sudlicemp = s1.sudlicemp
and s4.SudliFech = s1.SudliFech
and s4.sudlidesc = "HORAS EXTRAS"),
(select sudliimpt from sudli as s5
where s5.sudlicemp = s1.sudlicemp
and s5.SudliFech = s1.SudliFech
and s5.sudlidesc = "HORAS RECARGO"),
(select sudliimpt from sudli as s6
where s6.sudlicemp = s1.sudlicemp
and s6.SudliFech = s1.SudliFech
and s6.sudlidesc = "SALARIO DOMINICAL"),
(select sudliimpt from sudli as s7
where s7.sudlicemp = s1.sudlicemp
and s7.SudliFech = s1.SudliFech
and s7.sudlidesc = "BONO ESPECIAL"))
From sudli as s1la otra consulta de las otras 2 tablas es :
SELECT suliqcemp, suinefing, suliqfech,
suliqanti, suliquneg, suliqccos,
suliqcarg, suliqsuel,
suliqhext, suliqhrec, suliqtgan,
suinestat, suinetemp
FROM suliq, suine
WHERE suliq.suliqcemp=suine.suinecempespero que me haya podido explicado al respecto.
gracias
Degauss
Respuestas
-
Hola:
Creo que ya te habían comentado por ahí que usando la función PIVOT se resolvía, te doy la respuesta:
DECLARE @tabA table ( sudlicemp INT , sudlifech INT, sudlitmov INT, sudlidfapl INT, sudlitcon INT, sudlitcorr INT, sudliddesc VARCHAR(30), sudlimpt DECIMAL(10,2) ) DECLARE @tabB table ( suliqcemp INT , suliqfech INT , suliqanti VARCHAR(10), suliqsuel INT , suliqhext DECIMAL(10,2), suliqhrec DECIMAL(10,2), suliqtgan DECIMAL(10,2) ) DECLARE @tabC table ( suinecemp INT , suinefing DATE, suineuneg INT, suineccos INT, suineccar INT ) INSERT INTO @tabA VALUES( 5213, 112014, 1,1,6,1, 'HABER GANADO' , 1997.8 ) ,( 5213, 112014, 1,1,11,1, 'BONO DE ANTIGUEDAD' , 216) INSERT INTO @tabB VALUES ( 5213, 122014, '0304', 1977.8, 16, 86, 3076.33 ) INSERT INTO @tabC VALUES( 5213, '2010-09-01' , 5, 61 , 921 ) SELECT c.suinecemp, c.suinefing, c.suineuneg, c.suineccar, c.suineccar , b.suliqhrec, b.suliqfech , pt.[HABER GANADO], pt.[BONO DE ANTIGUEDAD] , b.suliqsuel , b.suliqtgan FROM ( SELECT sudlicemp , sudlimpt, sudliddesc FROM @tabA ) a PIVOT ( SUM( a.sudlimpt ) FOR a.sudliddesc IN ([HABER GANADO] , [BONO DE ANTIGUEDAD]) ) AS pt INNER JOIN @tabB b ON pt.sudlicemp = b.suliqcemp INNER JOIN @tabC c ON pt.sudlicemp = c.suinecemp
SALUDOS!- Marcado como respuesta PrcF miércoles, 13 de mayo de 2015 14:44
Todas las respuestas
-
Que tal amigo , puedes usar por pivot
declare @t table( id int, nombre varchar(50), qty int ) insert into @t select 65538,'FWD', 1 union select 65539, 'Cetes',8 union select 65540, 'Cetes', 14 union select 65541,'FWD', 12 union select 65556, 'Cetes',35 union select 65628,'FWD',321 union select 66884,'Cetes', 11 --select * from @t select * from @t PIVOT( SUM( qty ) FOR nombre IN ( [FWD],[Cetes] ) ) pt
OBS: Favor vota si te es útil la información.
Saludos
Bader Molinas - Paraguay
https://deveintel.wordpress.com/ -
-
-
estimado Bader el campo común entre las 3 tablas es sudlicemp, suliqcemp, suinecemp que es el codigo de usuario de la tabla sudli esta la estructura y las otras dos tablas son esos los campos que necesito la cual me muestra correctamente el lio es que si lo ves en la tabla sudli los datos estan verticales y estos mismos quiero que salga de manera horizontal pero juntos con los de las tablas suine y suliq.
Degauss
-
Hola PrcF
Para poder ofrecerte una respuesta concreta, regálanos los scripts de creación de tablas y los datos en forma de sentencias INSERTs, para que podamos reproducir tu escenario. Ojalá puedas proporcionarnos al menos los SELECTs de cada una de tus tablas así como el resultado que esperas obtener.
SALUDOS!
-
-
-
Favor si podrias crear las tablas e insertar los datos. De tal modo realizamos la query que necesitas
Ejemplo:
declare @Tabla table(id int,nombre varchar(50)) insert into @Tabla ( id, nombre ) values ( 1, -- id - int 'Carlos' -- nombre - varchar(50) ) select * from @Tabla as t
OBS: Favor vota si te es útil la información.
Saludos
Bader Molinas - Paraguay
https://deveintel.wordpress.com/
- Editado Bader Molinas martes, 12 de mayo de 2015 21:54
-
Hola:
Creo que ya te habían comentado por ahí que usando la función PIVOT se resolvía, te doy la respuesta:
DECLARE @tabA table ( sudlicemp INT , sudlifech INT, sudlitmov INT, sudlidfapl INT, sudlitcon INT, sudlitcorr INT, sudliddesc VARCHAR(30), sudlimpt DECIMAL(10,2) ) DECLARE @tabB table ( suliqcemp INT , suliqfech INT , suliqanti VARCHAR(10), suliqsuel INT , suliqhext DECIMAL(10,2), suliqhrec DECIMAL(10,2), suliqtgan DECIMAL(10,2) ) DECLARE @tabC table ( suinecemp INT , suinefing DATE, suineuneg INT, suineccos INT, suineccar INT ) INSERT INTO @tabA VALUES( 5213, 112014, 1,1,6,1, 'HABER GANADO' , 1997.8 ) ,( 5213, 112014, 1,1,11,1, 'BONO DE ANTIGUEDAD' , 216) INSERT INTO @tabB VALUES ( 5213, 122014, '0304', 1977.8, 16, 86, 3076.33 ) INSERT INTO @tabC VALUES( 5213, '2010-09-01' , 5, 61 , 921 ) SELECT c.suinecemp, c.suinefing, c.suineuneg, c.suineccar, c.suineccar , b.suliqhrec, b.suliqfech , pt.[HABER GANADO], pt.[BONO DE ANTIGUEDAD] , b.suliqsuel , b.suliqtgan FROM ( SELECT sudlicemp , sudlimpt, sudliddesc FROM @tabA ) a PIVOT ( SUM( a.sudlimpt ) FOR a.sudliddesc IN ([HABER GANADO] , [BONO DE ANTIGUEDAD]) ) AS pt INNER JOIN @tabB b ON pt.sudlicemp = b.suliqcemp INNER JOIN @tabC c ON pt.sudlicemp = c.suinecemp
SALUDOS!- Marcado como respuesta PrcF miércoles, 13 de mayo de 2015 14:44
-