Foros del Web » Programación para mayores de 30 ;) » .NET »

Store Procedure,girar columnas y filas

Estas en el tema de Store Procedure,girar columnas y filas en el foro de .NET en Foros del Web. Store Procedure,girar columnas y filas -------------------------------------------------------------------------------- eso miren tengo 2 tablas en mi base de datos la tabla emails y la tabla estado, cada email ...
  #1 (permalink)  
Antiguo 09/11/2004, 13:21
 
Fecha de Ingreso: septiembre-2004
Mensajes: 141
Antigüedad: 19 años, 7 meses
Puntos: 0
Store Procedure,girar columnas y filas

Store Procedure,girar columnas y filas

--------------------------------------------------------------------------------

eso miren tengo 2 tablas en mi base de datos la tabla emails y la tabla estado, cada email puede tener distintos estados ( en proceso=1, atrasado=2, cerrado=3)
en mi tabla estadotengo un system_id donde se enganchan la tabla emails y tabla estado.

mi problema es mostrar mediante un datagrid las filas de la siguiente manera
NOMB RUT PROCESO ATRASADO CERRADO TOTAL
Nombre1 rut 1 20 23 44
nombre2 rut 10 15 20 45
nombre3 rut 5 8 12 25

necesito mostrarlas de esa forma mi problema es que los estados estan en la tabla estado de la siguiente forma

system_id nombre_estado
1 proceso
2 atrasado
3 Cerrado

entonces al anganchar las tablas en las querys no hay forma de que me salgan hacia el lado sino que salen hacia abajo. Alguien me puede ayudar a invertir las tablas

hacia el lado y no hacia abajo como salen normalmente los datos en la query de sqlserver

tengo alguna forma de setear la salida de datos y hacer que estas columnas aparezcan hacia abajo
  #2 (permalink)  
Antiguo 09/11/2004, 13:56
 
Fecha de Ingreso: septiembre-2004
Mensajes: 141
Antigüedad: 19 años, 7 meses
Puntos: 0
habra alguna forma de mostrar mediante asp.net lo que yo quiero hacia el lado y no hacia abajo
  #3 (permalink)  
Antiguo 09/11/2004, 15:16
Avatar de splinter  
Fecha de Ingreso: junio-2004
Ubicación: Misantla,Ver.Mexico
Mensajes: 181
Antigüedad: 19 años, 10 meses
Puntos: 0
Hola

en sql server lo puedes hacer con transacsql, usarias la condicion CASE para formar las columnas que necesites, y usar agrupacion para poder obtener total, en cuanto pueda te mando un ejemplo

saludos

Última edición por splinter; 09/11/2004 a las 15:17
  #4 (permalink)  
Antiguo 10/11/2004, 08:27
 
Fecha de Ingreso: septiembre-2004
Mensajes: 141
Antigüedad: 19 años, 7 meses
Puntos: 0
okas

cumpa porfa si peudes darme un ejemplo 8 que ea super explicito con peras y manzanas ejje que ando medio oxidado en sql pero iguallo entiendo)

porfa si tieene un ejemplo seria super que mas encima deo aun tirarlo al aspx
  #5 (permalink)  
Antiguo 10/11/2004, 09:02
Avatar de splinter  
Fecha de Ingreso: junio-2004
Ubicación: Misantla,Ver.Mexico
Mensajes: 181
Antigüedad: 19 años, 10 meses
Puntos: 0
Hola

Lo probe y quedaria asi, me falto agrupar para obtener totales,
espero te de una idea de como lo puedes hacer
trate de hacer las tablas como tu las tienes,
con esto puedes desplegarlo en un grid y aparecera asi

EMAIL PROCESO ATRASADO CERRADO
email1 20 0 0
email2 33 0 0
email3 0 12 0
email4 0 0 188

***codigo sql

SELECT [email],
CASE [edo_ID] WHEN 1 THEN [emailvalor] ELSE 0 END AS 'PROCESO' ,
CASE [edo_ID] WHEN 2 THEN [emailvalor] ELSE 0 END AS 'ATRASADO',
CASE [edo_ID] WHEN 3 THEN [emailvalor] ELSE 0 END AS 'CERRADO'
FROM
(SELECT dbo.email.email, dbo.email.emailvalor, dbo.email.edo_ID
FROM dbo.email INNER JOIN
dbo.email_edo ON dbo.email.edo_ID = dbo.email_edo.edo_ID) AS SUB1



Saludos
  #6 (permalink)  
Antiguo 10/11/2004, 09:08
 
Fecha de Ingreso: septiembre-2004
Mensajes: 141
Antigüedad: 19 años, 7 meses
Puntos: 0
esto se peue meter dentro de un while y hacer que repita el proceso , y si quisiera lograr que alfinal sumara hacia el lado para obtener los totales?

se podra hacer??
  #7 (permalink)  
Antiguo 10/11/2004, 09:21
Avatar de splinter  
Fecha de Ingreso: junio-2004
Ubicación: Misantla,Ver.Mexico
Mensajes: 181
Antigüedad: 19 años, 10 meses
Puntos: 0
Asi es lo puedes sumar desde el cliente, con un while en .NET por ejemplo
o sumarlo desde el mismo sql agrupando y sumando, yo en mi caso lo haria todo
desde sql. perdon si no lo termine, pues estoy un poco ocupado

saludos

Última edición por splinter; 10/11/2004 a las 09:22
  #8 (permalink)  
Antiguo 10/11/2004, 12:18
 
Fecha de Ingreso: septiembre-2004
Mensajes: 141
Antigüedad: 19 años, 7 meses
Puntos: 0
splinter hiciste la prueba , me peudes mandar si tienes el codigo por hay porfa, mira que aun no me resulta bien esto y llevo 3 horas peleando con el
  #9 (permalink)  
Antiguo 10/11/2004, 18:49
Avatar de splinter  
Fecha de Ingreso: junio-2004
Ubicación: Misantla,Ver.Mexico
Mensajes: 181
Antigüedad: 19 años, 10 meses
Puntos: 0
mira, asi puede quedar

SELECT EMAIL,PROCESO,ATRASADO,CERRADO,(PROCESO + ATRASADO +CERRADO) AS TOTAL FROM
(
SELECT EMAIL,SUM(PROCESO) AS PROCESO,SUM(ATRASADO) AS ATRASADO,SUM(CERRADO)AS CERRADO
FROM(
SELECT [email],
CASE [edo_ID] WHEN 1 THEN [emailvalor] ELSE 0 END AS 'PROCESO' ,
CASE [edo_ID] WHEN 2 THEN [emailvalor] ELSE 0 END AS 'ATRASADO',
CASE [edo_ID] WHEN 3 THEN [emailvalor] ELSE 0 END AS 'CERRADO'
FROM
(SELECT dbo.email.email, dbo.email.emailvalor, dbo.email.edo_ID
FROM dbo.email INNER JOIN
dbo.email_edo ON dbo.email.edo_ID = dbo.email_edo.edo_ID)
AS SUB1
)SUB3
GROUP BY email
)SUB4

lo puedes convertir como SP o como View o ejecutar desde el codigo de tu aplicacion en .NET, como a ti se te facilite

saludos

Última edición por splinter; 10/11/2004 a las 18:56
  #10 (permalink)  
Antiguo 11/11/2004, 06:32
 
Fecha de Ingreso: septiembre-2004
Mensajes: 141
Antigüedad: 19 años, 7 meses
Puntos: 0
mira cumpa mis tablas son temporales porque Atrasado en proceso no existen como tal solo existen en la tabla tipo_email que tiene 1 si es en proceso, 2 si es atrasado, y 3 si es cerrado

mira te adjunto el sotre procedure qu me esta funcionando hasta el momento, ahora estoy pegado tratando de sacar un porcentaje

cumpa tu podrias auyudarme a lograr qe funcione
--------------------------------------------------------------
--------------------------------------------------------------
CREATE PROCEDURE SPX AS




select distinct tipo_email,tema2_email,0 as EnProceso,0 as Atrasado,0 as Cerrado,0 as CerradoAtrasado,count(*) as TOTAL
into ##r1
from profile
group by tipo_email,tema2_email



select
count(*)as total ,p.tipo_email
into ##r2
from profile p
where estado1=1
group by p.tipo_email

update ##r1 set Enproceso=r2.total
from ##r1 r1, ##r2 r2
where r1.tipo_email=r2.tipo_email




drop table ##r2



select
count(*) total ,p.tipo_email
into ##r3
from profile p
where estado1=2
group by p.tipo_email


update ##r1 set Atrasado=r3.total
from ##r1 r1, ##r3 r3
where r1.tipo_email=r3.tipo_email



drop table ##r3




select
count(*) total ,p.tipo_email
into ##r4
from profile p
where estado1=3
group by p.tipo_email


update ##r1 set Cerrado=r4.total
from ##r1 r1, ##r4 r4
where r1.tipo_email=r4.tipo_email

drop table ##r4



select
count(*) total ,p.tipo_email
into ##r5
from profile p
where estado1=4
group by p.tipo_email


update ##r1 set CerradoAtrasado=r5.total
from ##r1 r1, ##r5 r5
where r1.tipo_email=r5.tipo_email

select * from ##r1
drop table ##r5
drop table ##r1
GO

-----------------------------------------------------------
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:01.