none
crear una consulta con un campo con muchos datos con separacion de comas. RRS feed

  • Pregunta

  • buenas tardes, soy nuevo en esto. La duda que tengo quiero hacer un inner join con campo que cuenta con datos de la siguiente forma (1,2,3) , pero me marca un error

    SELECT count(con.ID_SolicitudContrato),
     div.descripcion
     FROM con_SolicitudContrato con    
     CROSS APPLY STRING_SPLIT(rs_ID_Subsidiaria, ';')
     inner join CAT_Subsidiaria su on su.ID_Subsidiaria=(value)
     inner join CAT_Division div on div.ID_Division=su.ID_Division
     group by div.descripcion

    con la consulta de arriba me manda esto


    osea me esta contando  las que tiene doble numero   


    lo que quiero  o estoy tratando es que no importe   cuantos rs_ID_subsidiarias tenga el campo(2,2,3) quiero que sea solo uno que al momento de hacer consulta al tener ejem. 12 solicitudes debo tener  12 rs_ID_Solicitudes sin importar que te  tenga muchas subsidiarias solo me cuente uno.

     ejemplo son 14 solicitudes   dispersas en diferentes areas


    martes, 15 de enero de 2019 22:10

Respuestas

  • Hola seleccionar un campo con muchos datos sql server:

    Supongo que has anexado imágenes a la pregunta, que no debiera de ser un debate. Y yo al menos aún no las veo.

    Aunque he intentado deducir de tu consulta que el escenario es tal que:

    create table con_SolicitudContrato (
    id_solicitudContrato int,rs_id_Subsidiaria varchar(100)
    )
    create table cat_subsidiaria (
    id_subsidiaria int, id_division int
    )
    create table cat_division (
    descripcion varchar(10) , id_division int
    )
    go
    
    insert into con_SolicitudContrato 
    (id_solicitudContrato , rs_id_Subsidiaria)
    values 
    (1,'1,2,3,4,5,6,7'),
    (2,'1,2,3,5,4,23'),
    (3,'1,2,3,5,4,23'),
    (4,'1,2,3,5,4,23')
    go
    insert into cat_subsidiaria 
    (id_subsidiaria, id_division)
    values 
    (1,1), (2,2);
    go
    insert into cat_division 
    (id_division, descripcion)
    values
    (1,'a'),(2,'b');
    go
    /*Fin recreación escenario*/
    
    SELECT COUNT(o.id_solicitudContrato) AS numSolicitud, 
           o.descripcion
    FROM
    (
        SELECT(con.ID_SolicitudContrato), 
              div.descripcion
        FROM con_SolicitudContrato con
             CROSS APPLY STRING_SPLIT(rs_ID_Subsidiaria, ',')
             INNER JOIN CAT_Subsidiaria su ON su.ID_Subsidiaria = (value)
             INNER JOIN CAT_Division div ON div.ID_Division = su.ID_Division
    ) AS o
    GROUP BY o.descripcion;

    Una posible solución, es devolver todos los conjuntos en una tabla derivada y proceder a la función de agrupación para contar, en la tabla externa.

    Salida

    Espero te ayude


    miércoles, 16 de enero de 2019 5:28