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

Concatenar un campo en una consulta con group by

Estas en el tema de Concatenar un campo en una consulta con group by en el foro de .NET en Foros del Web. Estoy intentando hacer una cosulta apra un grid que en primer termino me muestro de uan tabla dodne tengo el dni profesor,cursos ,medias de, lso ...
  #1 (permalink)  
Antiguo 20/07/2005, 09:38
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 2 meses
Puntos: 1
Concatenar un campo en una consulta con group by

Estoy intentando hacer una cosulta apra un grid que en primer termino me muestro de uan tabla dodne tengo el dni profesor,cursos ,medias de, lso cursos y observacioens en los cursos.
Entonces agrupados por profesor muestro el numero de cursos que hay(count(*)) la media de la media de cada curso por profesor(avg(media)) y me gustario que me apareceiran las observaciones concatenadas pero me salta el error de que observaciones no estan incluidas en ninguna función de grupo...

Tb intente cambiar l dni d eprofesor por su nombre y apeelidos q estan en la tabla de datos de profesore pero me saltaba el mismo error(

la consulta q tengo es esta:

adap1=new System.Data.SqlClient.SqlDataAdapter("select (profesor) 'PROFESOR'"& _
",count(*) 'NUM',avg(media) 'VALORACION','observaciones "& _
"from profesores_cursos pc "& _
" group by profesor" ,cn)

(profesor devuleve el dni)
y la que tenia con los datos de profesores era esta:

adap1=new System.Data.SqlClient.SqlDataAdapter("select (p.nombre + ' ' + p.apellidos) 'PROFESOR'"& _
",count(*) 'NUM',avg(pc.media) 'VALORACION', observaciones "& _
"from profesores_cursos pc,profesores p where p.dni=pc.profesor "& _
" group by pc.profesor" ,cn)

Alguna sugerencia??Tengo bastante en el olvido sql
  #2 (permalink)  
Antiguo 20/07/2005, 10:12
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Recuerda que cuando usaas funciones agregadas todos los campos que incluyas en la query deben ir en del group by... algo así quedaría:


Cita:
adap1=new System.Data.SqlClient.SqlDataAdapter("select
count(*) 'NUM',avg(media) 'VALORACION'," & _
"profesor 'PROFESOR', "& _
"'observaciones' "& _
"from profesores_cursos pc "& _
" group by profesor,'observaciones'" ,cn)
Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 21/07/2005, 01:36
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 2 meses
Puntos: 1
Yapero no me sale lo que intento conseguir.te coemto rootk o al que pueda ayudarme.

Si un profesor esta en 2 cursos con group by profesor y un count(*) me devovlera el el profesor y un 2

si añado que em devuelva observaciones y lo añado al group by
me devulve

profesor1 1 observacion1
proesor1 1 observaion2


y lo que queiro es que me apareczan concatenadas las observaciones en una unica fila.

profesor1 2 observacion1obseracion2

Es posible?????
  #4 (permalink)  
Antiguo 21/07/2005, 02:05
 
Fecha de Ingreso: enero-2005
Ubicación: Benifaió (Valencia)
Mensajes: 319
Antigüedad: 19 años, 3 meses
Puntos: 0
Las observaciones son de la misma tabla donde esta el profesor??? Si es asi, lo mas seguro es que te ponga cada profesor y su descripcion.
Para evitar esto puedes utilizar DISTINCTROW, o sin el ROW (no lo recuerdo), el cual te muestra los resultados distinguiend entre todos los campos de la fila o solo el que indiques:
Cita:

adap1=new System.Data.SqlClient.SqlDataAdapter("select
count(*) 'NUM',avg(media) 'VALORACION'," & _
"DISTINCT profesor 'PROFESOR', "& _
"'observaciones' "& _
"from profesores_cursos pc "& _
" group by profesor,'observaciones'" ,cn)
  #5 (permalink)  
Antiguo 21/07/2005, 02:35
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 2 meses
Puntos: 1
La columna observaiones esta en esa tabla profesores_cursos

Si pongo el disctinc lo ingona,me sigue sacando varias filas por cada profesor,esto ocurre cdo añado la columna observaciones que no tiene ninguna funcion de grupo con la media o el count q las sume o hag ala media,y por lo tatno parece ser que me saca una fila por obervacion lo que hace qeu no me sirva d enada el group by y el cotun ni la media....Lo que megustaio es que todas las observaiones de un profesor me las juntaria como he puesto antes.
  #6 (permalink)  
Antiguo 21/07/2005, 02:40
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Con eso sigue sin conseguir lo que dice. Por mi parte, te recomiendo:

1- Te crees un procedimiento almacenado que recibe como variable la id del profesor y a través de un bucle, coja todas las observaciones y las concatene en una sola variable. Para así llamar a tu procedimiento almacenado desde tu consulta.

2- Pillas la consulta sin observaciones, y en tu aplicación y a través de codigo pillas las observaciones, recorriendo profesor por profesor.


3-En el foro de base de datos, pongas tu GBD y lo preguntes alli, que seguro que hay algún hacha que sabe alguna forma mejor.

PD. de todas maneras, yo le seguiré dando unas vueltecillas haber.
  #7 (permalink)  
Antiguo 21/07/2005, 04:31
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 2 meses
Puntos: 1
Posiblididad;
Se puede modificar una colmna de un dataset??
Por que podria cargar en e ldattset todos menso las observaciones lo que generara las fials q necesito y añadir un columna en la culsuita tal q asi
' 'observadciones'
seria modificar el valor de esta columna fla por fila dependiendo del profesor... y para tener las observaiones concatenadas un metodo ya sea lamacenado o en el servidor.

Es q no se si se piede modificar una columan de un dataset....
  #8 (permalink)  
Antiguo 21/07/2005, 05:13
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Si se puede modificar.

midataset.Tables("mitabla").Rows(i)("observaciones ") = "Lo que sea"
o
midataset.Tables("mitabla").Rows(i)("observaciones ") += "Lo que sea"

siendo i la variable incremental de un bucle que recorre las filas
  #9 (permalink)  
Antiguo 21/07/2005, 05:25
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 2 meses
Puntos: 1
pues ya esta,con eso el tema solucionado,hago un bucle que lo vaya emtendo,un poco chepuzilla pero sin mas.
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 03:05.