none
CONSULTA CON VARIOS WHERE Y RENOMBRAMIENTO DE COLUMNAS

    Pregunta

  • Hola a todos!

    Tengo una duda, no se como agregar las columnas que me faltan para mi consulta, tengo que sacar el siguiente cuadro para pasarlo a un crystal report; con lo que he hecho solo logro traer un tipo de "clasificación", o saco la de todos pero por separado y a mi me interesa que salga todo junto con la misma consulta, agradezco mucho su tiempo de leerme y ayuda.
    Anexo lo que llevo hecho. Para el crystal ocupare dos parametros que son Fechainicio y Fechafin partiendo de la fecha de captura.

    *lo que he logrado hacer


    gaby


    • Editado Gabriela1403 viernes, 17 de mayo de 2019 19:54 Se habia acomodado mal con el texto
    viernes, 17 de mayo de 2019 19:52

Respuestas

  • Hola Gaby:

    Es imposible ayudarte si tú por delante no nos preparas un poco mejor la pregunta.

    Nadie sabe como es tu tabla, sólo imaginamos, como sea por la imagen, pero no sabemos si todos los datos salen de RentasPadron, etc....

    Guía para preguntar en el foro y obtener respuestas satisfactorias

    Ayudanos a ayudarte

    Ahora bien, yo me he supuesto este escenario. (ojo si no se parece, tendrás que aportar mucho más)

    CREATE TABLE RentasPadron
    (id            INT IDENTITY(1, 1)
    , fechaCaptura  DATETIME
    , Delegacion    VARCHAR(100)
    , clasificacion VARCHAR(10)
    , predioOrigen  INT
    );
    GO
    Insert into RentasPadron (fechaCaptura, Delegacion, clasificacion, predioOrigen)
    values
    ('20190101','ÁLVARO OBREGÓN','ESTRUCTURA',2),
    ('20190102','ÁLVARO OBREGÓN','ESTRUCTURA',2),
    ('20190103','ÁLVARO OBREGÓN','GEOLÓGICO' ,1),
    ('20190104','ÁLVARO OBREGÓN','HIDROMETE' ,2),
    ('20190105','ÁLVARO OBREGÓN','HIDROMETE' ,3),
    ('20190106','ÁLVARO OBREGÓN','HIDROMETE' ,2),
    ('20190107','ÁLVARO OBREGÓN','ESTRUCTURA',9),
    ('20190108','ÁLVARO OBREGÓN','ESTRUCTURA',2),
    ('20190109','ÁLVARO OBREGÓN','FÍSICO Y Q',4),
    ('20190111','ÁLVARO OBREGÓN','FÍSICO Y Q',2),
    ('20190113','ÁLVARO OBREGÓN','ESTRUCTURA',3),
    ('20190114','ÁLVARO OBREGÓN','ESTRUCTURA',2),
    ('20190111','ÁLVARO OBREGÓN','P EMERGENT',2),
    ('20190112','ÁLVARO OBREGÓN','P EMERGENT',1),
    ('20190115','ÁLVARO OBREGÓN','P EMERGENT',2),
    ('20190119','ÁLVARO OBREGÓN','ESTRUCTURA',1),
    ('20190112','ÁLVARO OBREGÓN','P. NORMAL' ,5),
    ('20190113','ÁLVARO OBREGÓN','P. NORMAL' ,2),
    ('20190115','ÁLVARO OBREGÓN','P. NORMAL' ,7),
    ('20190117','ÁLVARO OBREGÓN','ESTRUCTURA',2),
    ('20190101','AZCAPOTZALCO'  ,'ESTRUCTURA',2),
    ('20190102','AZCAPOTZALCO'  ,'ESTRUCTURA',2),
    ('20190103','AZCAPOTZALCO'  ,'GEOLÓGICO' ,1),
    ('20190104','AZCAPOTZALCO'  ,'HIDROMETE' ,2),
    ('20190105','AZCAPOTZALCO'  ,'HIDROMETE' ,3),
    ('20190106','AZCAPOTZALCO'  ,'HIDROMETE' ,2),
    ('20190107','AZCAPOTZALCO'  ,'ESTRUCTURA',9),
    ('20190108','AZCAPOTZALCO'  ,'ESTRUCTURA',2),
    ('20190109','AZCAPOTZALCO'  ,'FÍSICO Y Q',4),
    ('20190111','AZCAPOTZALCO'  ,'FÍSICO Y Q',2),
    ('20190113','AZCAPOTZALCO'  ,'ESTRUCTURA',3),
    ('20190114','AZCAPOTZALCO'  ,'ESTRUCTURA',2),
    ('20190111','AZCAPOTZALCO'  ,'P EMERGENT',2),
    ('20190112','AZCAPOTZALCO'  ,'P EMERGENT',1),
    ('20190115','AZCAPOTZALCO'  ,'P EMERGENT',2),
    ('20190119','AZCAPOTZALCO'  ,'ESTRUCTURA',1),
    ('20190112','AZCAPOTZALCO'  ,'P. NORMAL' ,5),
    ('20190113','AZCAPOTZALCO'  ,'P. NORMAL' ,2),
    ('20190115','AZCAPOTZALCO'  ,'P. NORMAL' ,7),
    ('20190117','AZCAPOTZALCO'  ,'ESTRUCTURA',2);
    GO
    

    La columna id, no importa para el escenario, solo es para generar un registro diferente por cada fila. 

    Creo que lo que quieres es un pivot simple. por la columna clasificación. Esto requiere de saber el texto explicito de las filas, que van a pasar a ser columnas y una columna para usar una función de agregación. 

    SELECT DELEGACION
    	, [ESTRUCTURA] AS ESTRUCTURAL
    	, [GEOLÓGICO]  AS [GEOLOGICO]
    	, [HIDROMETE]  AS [HIDROMETE OROLÓGICO]
    	, [FÍSICO Y Q] AS [FÍSICO QUÍMICO]
    	, [P EMERGENT] AS [PROGRAMA EMERGENTE]
    	, [P. NORMAL]  AS [PROGRAMA NORMAL]
    FROM       
    (
        SELECT DELEGACION
    	    , CLASIFICACION
    	    , predioOrigen
        FROM   
    	    RENTASPADRON
    ) AS SOURCE PIVOT(SUM(PREDIOORIGEN) 
        FOR CLASIFICACION IN([ESTRUCTURA]
    				   , [GEOLÓGICO]
    				   , [HIDROMETE]
    				   , [FÍSICO Y Q]
    				   , [P EMERGENT]
    				   , [P. NORMAL])) AS PVT;

    Salida

    Fíjate que la columna fecha no puede participar de la salida, porque sino no tendríamos una fila para la delegación AZCAPOTZALCO... sino una por cada fecha, y no es esa la idea, pero si puede participar del filtro, o devolverse las fechas filtradas, o como es un procedure devolverse dos conjuntos, uno con los datos, para tener todas las fechas, y otro con el pivot a modo de resumen.

    CREATE OR ALTER PROCEDURE dbo.[spu_Rp_reporteTipoRiesgo]
    (
    @FechaIni as smallDateTime,
    @FechaFin as smallDateTime
    )As
    BEGIN
    
    SELECT DELEGACION
    	, [ESTRUCTURA] AS ESTRUCTURAL
    	, [GEOLÓGICO]  AS [GEOLOGICO]
    	, [HIDROMETE]  AS [HIDROMETE OROLÓGICO]
    	, [FÍSICO Y Q] AS [FÍSICO QUÍMICO]
    	, [P EMERGENT] AS [PROGRAMA EMERGENTE]
    	, [P. NORMAL]  AS [PROGRAMA NORMAL]
    FROM       
    (
        SELECT DELEGACION
    	    , CLASIFICACION
    	    , predioOrigen
        FROM   
    	    RENTASPADRON
        WHERE fechaCaptura >= @FechaIni AND fechaCaptura <= @FechaFin
    ) AS SOURCE PIVOT(SUM(PREDIOORIGEN) 
        FOR CLASIFICACION IN([ESTRUCTURA]
    				   , [GEOLÓGICO]
    				   , [HIDROMETE]
    				   , [FÍSICO Y Q]
    				   , [P EMERGENT]
    				   , [P. NORMAL])) AS PVT
    ORDER BY DELEGACION;
    END

    Por tanto tu procedure, podría ser algo así.

    PIVOT

    https://docs.microsoft.com/es-es/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-2017

    Espero te ayude

    sábado, 18 de mayo de 2019 4:37
  • Hola Gabriela 1403:

    A priori parece que lo que necesitas es trasponer filas por columnas. Por delegación y predio.

    DECLARE @FechaIni AS SMALLDATETIME= '20190105';
    
    DECLARE @FechaFin AS SMALLDATETIME= '20191231';
    
    WITH CTE
    	AS (SELECT DISTINCT 
    			 DELEGACION
    	    FROM   
    		    RENTASPADRON
    	    WHERE  fechaCaptura >= @FechaIni
    			 AND fechaCaptura <= @FechaFin),
    	CUENTA
    	AS (SELECT DELEGACION
    		    , PredioOrigen
    		    , SUM(CASE WHEN CLASIFICACION = 'ESTRUCTURA'
    					    THEN 1
    				END) AS ESTRUCTURA
    		    , SUM(CASE WHEN CLASIFICACION = 'H-G-FQ'
    					    THEN 1
    				END) AS HGFQ
    		    , SUM(CASE WHEN CLASIFICACION = 'CAMPAMENTO'
    					    THEN 1
    				END) AS CAMPAMENTO
    		    , SUM(CASE WHEN CLASIFICACION = 'ACCIONES D'
    					    THEN 1
    				END) AS NORMAL
    	    FROM   
    		    RentasPadron
    	    GROUP BY Delegacion
    			 , predioOrigen)
    	SELECT CTE.Delegacion
    		, D.PredioOrigen
    		, ISNULL(D.ESTRUCTURA,0) AS ESTRUCTURAL
    		, ISNULL(D.HGFQ,0) AS [H-G-FQ]
    		, ISNULL(D.CAMPAMENTO,0) AS [PROGRAMA EMERGENTE]
    		, ISNULL(D.NORMAL,0) AS [PRGRAMA NORMAL]
    	FROM   
    		CTE
    			LEFT JOIN CUENTA D ON CTE.Delegacion = D.Delegacion;

    Salida

    Básicamente, en el primer conjunto de tabla, recojo solo las delegaciones, en el segundo conjunto realizo una suma agrupada por cada delegación y predio de un 1 (esto es igual que un count), por cada repetición, pero dentro de la función sum, se establece caso de que clasificación sea= xxx, por tanto en cada fila si clasificación contiene el valor solicitado pone un 1 y sino pone null.

    A la salida de los conjuntos los igualo por delegación y muestro los datos de las sumas.

    Tablas de expresión común

    https://javifer2.blogspot.com/search/label/tablas%20de%20expresi%C3%B3n%20com%C3%BAn%20%281%29

    https://javifer2.blogspot.com/search/label/tablas%20de%20expresi%C3%B3n%20com%C3%BAn%20%282%29%20Correlativos

    No lo he metido dentro del procedure, para que valides si es realmente lo que necesites de un modo más fácil.

    miércoles, 22 de mayo de 2019 20:01

Todas las respuestas

  • En lo personal, no entiendo cual es tu duda

    IIslas Master Consultant SQL Server

    viernes, 17 de mayo de 2019 22:17
  • Hola Gaby:

    Es imposible ayudarte si tú por delante no nos preparas un poco mejor la pregunta.

    Nadie sabe como es tu tabla, sólo imaginamos, como sea por la imagen, pero no sabemos si todos los datos salen de RentasPadron, etc....

    Guía para preguntar en el foro y obtener respuestas satisfactorias

    Ayudanos a ayudarte

    Ahora bien, yo me he supuesto este escenario. (ojo si no se parece, tendrás que aportar mucho más)

    CREATE TABLE RentasPadron
    (id            INT IDENTITY(1, 1)
    , fechaCaptura  DATETIME
    , Delegacion    VARCHAR(100)
    , clasificacion VARCHAR(10)
    , predioOrigen  INT
    );
    GO
    Insert into RentasPadron (fechaCaptura, Delegacion, clasificacion, predioOrigen)
    values
    ('20190101','ÁLVARO OBREGÓN','ESTRUCTURA',2),
    ('20190102','ÁLVARO OBREGÓN','ESTRUCTURA',2),
    ('20190103','ÁLVARO OBREGÓN','GEOLÓGICO' ,1),
    ('20190104','ÁLVARO OBREGÓN','HIDROMETE' ,2),
    ('20190105','ÁLVARO OBREGÓN','HIDROMETE' ,3),
    ('20190106','ÁLVARO OBREGÓN','HIDROMETE' ,2),
    ('20190107','ÁLVARO OBREGÓN','ESTRUCTURA',9),
    ('20190108','ÁLVARO OBREGÓN','ESTRUCTURA',2),
    ('20190109','ÁLVARO OBREGÓN','FÍSICO Y Q',4),
    ('20190111','ÁLVARO OBREGÓN','FÍSICO Y Q',2),
    ('20190113','ÁLVARO OBREGÓN','ESTRUCTURA',3),
    ('20190114','ÁLVARO OBREGÓN','ESTRUCTURA',2),
    ('20190111','ÁLVARO OBREGÓN','P EMERGENT',2),
    ('20190112','ÁLVARO OBREGÓN','P EMERGENT',1),
    ('20190115','ÁLVARO OBREGÓN','P EMERGENT',2),
    ('20190119','ÁLVARO OBREGÓN','ESTRUCTURA',1),
    ('20190112','ÁLVARO OBREGÓN','P. NORMAL' ,5),
    ('20190113','ÁLVARO OBREGÓN','P. NORMAL' ,2),
    ('20190115','ÁLVARO OBREGÓN','P. NORMAL' ,7),
    ('20190117','ÁLVARO OBREGÓN','ESTRUCTURA',2),
    ('20190101','AZCAPOTZALCO'  ,'ESTRUCTURA',2),
    ('20190102','AZCAPOTZALCO'  ,'ESTRUCTURA',2),
    ('20190103','AZCAPOTZALCO'  ,'GEOLÓGICO' ,1),
    ('20190104','AZCAPOTZALCO'  ,'HIDROMETE' ,2),
    ('20190105','AZCAPOTZALCO'  ,'HIDROMETE' ,3),
    ('20190106','AZCAPOTZALCO'  ,'HIDROMETE' ,2),
    ('20190107','AZCAPOTZALCO'  ,'ESTRUCTURA',9),
    ('20190108','AZCAPOTZALCO'  ,'ESTRUCTURA',2),
    ('20190109','AZCAPOTZALCO'  ,'FÍSICO Y Q',4),
    ('20190111','AZCAPOTZALCO'  ,'FÍSICO Y Q',2),
    ('20190113','AZCAPOTZALCO'  ,'ESTRUCTURA',3),
    ('20190114','AZCAPOTZALCO'  ,'ESTRUCTURA',2),
    ('20190111','AZCAPOTZALCO'  ,'P EMERGENT',2),
    ('20190112','AZCAPOTZALCO'  ,'P EMERGENT',1),
    ('20190115','AZCAPOTZALCO'  ,'P EMERGENT',2),
    ('20190119','AZCAPOTZALCO'  ,'ESTRUCTURA',1),
    ('20190112','AZCAPOTZALCO'  ,'P. NORMAL' ,5),
    ('20190113','AZCAPOTZALCO'  ,'P. NORMAL' ,2),
    ('20190115','AZCAPOTZALCO'  ,'P. NORMAL' ,7),
    ('20190117','AZCAPOTZALCO'  ,'ESTRUCTURA',2);
    GO
    

    La columna id, no importa para el escenario, solo es para generar un registro diferente por cada fila. 

    Creo que lo que quieres es un pivot simple. por la columna clasificación. Esto requiere de saber el texto explicito de las filas, que van a pasar a ser columnas y una columna para usar una función de agregación. 

    SELECT DELEGACION
    	, [ESTRUCTURA] AS ESTRUCTURAL
    	, [GEOLÓGICO]  AS [GEOLOGICO]
    	, [HIDROMETE]  AS [HIDROMETE OROLÓGICO]
    	, [FÍSICO Y Q] AS [FÍSICO QUÍMICO]
    	, [P EMERGENT] AS [PROGRAMA EMERGENTE]
    	, [P. NORMAL]  AS [PROGRAMA NORMAL]
    FROM       
    (
        SELECT DELEGACION
    	    , CLASIFICACION
    	    , predioOrigen
        FROM   
    	    RENTASPADRON
    ) AS SOURCE PIVOT(SUM(PREDIOORIGEN) 
        FOR CLASIFICACION IN([ESTRUCTURA]
    				   , [GEOLÓGICO]
    				   , [HIDROMETE]
    				   , [FÍSICO Y Q]
    				   , [P EMERGENT]
    				   , [P. NORMAL])) AS PVT;

    Salida

    Fíjate que la columna fecha no puede participar de la salida, porque sino no tendríamos una fila para la delegación AZCAPOTZALCO... sino una por cada fecha, y no es esa la idea, pero si puede participar del filtro, o devolverse las fechas filtradas, o como es un procedure devolverse dos conjuntos, uno con los datos, para tener todas las fechas, y otro con el pivot a modo de resumen.

    CREATE OR ALTER PROCEDURE dbo.[spu_Rp_reporteTipoRiesgo]
    (
    @FechaIni as smallDateTime,
    @FechaFin as smallDateTime
    )As
    BEGIN
    
    SELECT DELEGACION
    	, [ESTRUCTURA] AS ESTRUCTURAL
    	, [GEOLÓGICO]  AS [GEOLOGICO]
    	, [HIDROMETE]  AS [HIDROMETE OROLÓGICO]
    	, [FÍSICO Y Q] AS [FÍSICO QUÍMICO]
    	, [P EMERGENT] AS [PROGRAMA EMERGENTE]
    	, [P. NORMAL]  AS [PROGRAMA NORMAL]
    FROM       
    (
        SELECT DELEGACION
    	    , CLASIFICACION
    	    , predioOrigen
        FROM   
    	    RENTASPADRON
        WHERE fechaCaptura >= @FechaIni AND fechaCaptura <= @FechaFin
    ) AS SOURCE PIVOT(SUM(PREDIOORIGEN) 
        FOR CLASIFICACION IN([ESTRUCTURA]
    				   , [GEOLÓGICO]
    				   , [HIDROMETE]
    				   , [FÍSICO Y Q]
    				   , [P EMERGENT]
    				   , [P. NORMAL])) AS PVT
    ORDER BY DELEGACION;
    END

    Por tanto tu procedure, podría ser algo así.

    PIVOT

    https://docs.microsoft.com/es-es/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-2017

    Espero te ayude

    sábado, 18 de mayo de 2019 4:37
  • Hola muchísimas gracias por leerme, una disculpa por no poner toda la información necesaria, te comento:
    Toda la información sale de RentasPadron, tu ejemplo me ha servido bastante, aunque aun no logro sacar lo que necesito ya que en tu ejemplo faltan los predios, los predios dependen de la delegación es decir: en ALVARO OBREGON existe predio1 (colonia1), predio2 (colonia2) etc por eso en mi ejemplo ocupe count.

    CREATE TABLE RentasPadron
    (IDRentasPadron      INT IDENTITY(1, 1)
    , fechaCaptura  DATETIME
    , Delegacion    VARCHAR(100)
    , clasificacion VARCHAR(10)
    , predioOrigen  VARCHAR (50)
    );
    GO
    Insert into RentasPadron (fechaCaptura, Delegacion, clasificacion, predioOrigen)
    values
    ('20190101','ÁLVARO OBREGÓN','ESTRUCTURA','COLONIA LA FLOR'),
    
    
    ('20190102','ÁLVARO OBREGÓN','ESTRUCTURA','COLONIA LA FLOR'),
    
    ('20190103','ÁLVARO OBREGÓN','H-G-FQ' , 'COLONIA LA FLOR'),
    
    ('20190104','ÁLVARO OBREGÓN','H-G-FQ' ,'COLONIA MANZANA'),
    ('20190105','ÁLVARO OBREGÓN','H-G-FQ' ,'COLONIA MANZANA'),
    ('20190106','ÁLVARO OBREGÓN','H-G-FQ' ,'COLONIA PEPINO'),
    ('20190107','ÁLVARO OBREGÓN','ESTRUCTURA','COLONIA PEPINO),
    ('20190108','ÁLVARO OBREGÓN','ESTRUCTURA','COLONIA PEPINO'),
    ('20190109','ÁLVARO OBREGÓN','H-G-FQ','COLONIA PEPINO'),
    ('20190111','ÁLVARO OBREGÓN','H-G-FQ','COLONIA JICAMA'),
    ('20190113','ÁLVARO OBREGÓN','ESTRUCTURA','COLONIA JICAMA'),
    ('20190114','ÁLVARO OBREGÓN','ESTRUCTURA','COLONIA PERA'),
    ('20190111','ÁLVARO OBREGÓN','CAMPAMENTO','COLONIA PERA'),
    ('20190112','ÁLVARO OBREGÓN','CAMPAMENTO','COLONIA PERA'),
    ('20190115','ÁLVARO OBREGÓN','CAMPAMENTO,'COLONIA PERA'),
    ('20190119','ÁLVARO OBREGÓN','ESTRUCTURA','COLONIA PERA'),
    ('20190112','ÁLVARO OBREGÓN','ACCIONES D' ,'COLONIA UVA'),
    ('20190113','ÁLVARO OBREGÓN','ACCIONES D' ,'COLONIA UVA'),
    ('20190115','ÁLVARO OBREGÓN','ACCIONES D' ,'COLONIA UVA'),
    ('20190117','ÁLVARO OBREGÓN','ESTRUCTURA','COLONIA UVA'),
    ('20190101','AZCAPOTZALCO'  ,'ESTRUCTURA','COLONIA LA NUEZ'),
    ('20190102','AZCAPOTZALCO'  ,'ESTRUCTURA','COLONIA LA NUEZ'),
    ('20190103','AZCAPOTZALCO'  ,'H-G-FQ-' ,'COLONIA LA NUEZ'),
    ('20190104','AZCAPOTZALCO'  ,'H-G-FQ' ,'COLONIA PIÑA'),
    ('20190105','AZCAPOTZALCO'  ,'H-G-FQ' ,'COLONIA PIÑA'),
    ('20190106','AZCAPOTZALCO'  ,'H-G-FQ' ,'COLONIA PIÑA'),
    ('20190107','AZCAPOTZALCO'  ,'ESTRUCTURA','COLONIA DURAZNO'),
    ('20190108','AZCAPOTZALCO'  ,'ESTRUCTURA','COLONIA DURAZNO),
    ('20190109','AZCAPOTZALCO'  ,'H-G-FQ','COLONIA DURAZNO'),
    ('20190111','AZCAPOTZALCO'  ,'H-G-FQ','COLONIA DURAZNO'),
    ('20190113','AZCAPOTZALCO'  ,'ESTRUCTURA','COLONIA DURAZNO'),
    ('20190114','AZCAPOTZALCO'  ,'ESTRUCTURA','COLONIA FRESA'),
    ('20190111','AZCAPOTZALCO'  ,'CAMPAMENTO','COLONIA FRESA'),
    ('20190112','AZCAPOTZALCO'  ,'CAMPAMENTO','COLONIA FRESA'),
    ('20190115','AZCAPOTZALCO'  ,'CAMPAMENTO',2'COLONIA FRESA'),
    ('20190119','AZCAPOTZALCO'  ,'ESTRUCTURA','COLONIA NARANJA'),
    ('20190112','AZCAPOTZALCO'  ,'ACCIONES D' ,'COLONIA NARANJA'),
    ('20190113','AZCAPOTZALCO'  ,'ACCIONES D' ,'COLONIA NARANJA'),
    ('20190115','AZCAPOTZALCO'  ,'ACCIONES D' ,'COLONIA NARANJA'),
    ('20190117','AZCAPOTZALCO'  ,'ESTRUCTURA','COLONIA NARANJA');
    GO

    Este es el procedimiento que logre sacar pero me muestra informacion erronea

    ALTER PROCEDURE [dbo].[spu_Rp_reporteTipoRiesgo_PRUEBAGABY]
    (
    @FechaIni as smallDateTime,
    @FechaFin as smallDateTime
    )As
    BEGIN
    
    Select
    distinct Delegacion,
    
    (Select count(Clasificacion)FROM RentasPadron where
    	Clasificacion = 'ESTRUCTURA'
    ) as ESTRUCTURAL,
    
    (Select count(PredioOrigen)FROM RentasPadron where
    	Clasificacion = 'ESTRUCTURA'
    ) as Predios,
    
    (Select count(Clasificacion)FROM RentasPadron where
    	Clasificacion = 'H-G-FQ'
    ) as [H-G-FQ],
    
    (Select count(PredioOrigen)FROM RentasPadron where
    	Clasificacion = 'H-G-FQ'
    ) as Predios,
    
    (Select count(Clasificacion)FROM RentasPadron where
    	Clasificacion = 'CAMPAMENTO'
    ) as [PROGRAMA EMERGENTE],
    
    (Select count(PredioOrigen)FROM RentasPadron where
    	Clasificacion = 'CAMPAMENTO'
    ) as Predios,
    
    (Select count(Clasificacion)FROM RentasPadron where
    	Clasificacion = 'ACCIONES D'
    ) as [PROGRAMA NORMAL],
    
    (Select count(PredioOrigen)FROM RentasPadron where
    	Clasificacion = 'ACCIONES D'
    ) as Predios
    
    FROM
        RentasPadron 
    where
        FechaCaptura >= @FechaIni AND FechaCaptura <= @FechaFin 
    group by
        FechaCaptura, Delegacion, Clasificacion
    ORDER BY
        Delegacion ASC
    
    END


    Trayendome algo asi: (Son números grandes porque tengo un padron de 1940)

    La clasificacion de "hidro, geologico y fisico quimico" estan unidos en la tabla por eso aparece asi.


    gaby

    • Propuesto como respuesta Carlos_Ruiz_M miércoles, 22 de mayo de 2019 19:52
    miércoles, 22 de mayo de 2019 18:21
  • Hola Gabriela 1403:

    A priori parece que lo que necesitas es trasponer filas por columnas. Por delegación y predio.

    DECLARE @FechaIni AS SMALLDATETIME= '20190105';
    
    DECLARE @FechaFin AS SMALLDATETIME= '20191231';
    
    WITH CTE
    	AS (SELECT DISTINCT 
    			 DELEGACION
    	    FROM   
    		    RENTASPADRON
    	    WHERE  fechaCaptura >= @FechaIni
    			 AND fechaCaptura <= @FechaFin),
    	CUENTA
    	AS (SELECT DELEGACION
    		    , PredioOrigen
    		    , SUM(CASE WHEN CLASIFICACION = 'ESTRUCTURA'
    					    THEN 1
    				END) AS ESTRUCTURA
    		    , SUM(CASE WHEN CLASIFICACION = 'H-G-FQ'
    					    THEN 1
    				END) AS HGFQ
    		    , SUM(CASE WHEN CLASIFICACION = 'CAMPAMENTO'
    					    THEN 1
    				END) AS CAMPAMENTO
    		    , SUM(CASE WHEN CLASIFICACION = 'ACCIONES D'
    					    THEN 1
    				END) AS NORMAL
    	    FROM   
    		    RentasPadron
    	    GROUP BY Delegacion
    			 , predioOrigen)
    	SELECT CTE.Delegacion
    		, D.PredioOrigen
    		, ISNULL(D.ESTRUCTURA,0) AS ESTRUCTURAL
    		, ISNULL(D.HGFQ,0) AS [H-G-FQ]
    		, ISNULL(D.CAMPAMENTO,0) AS [PROGRAMA EMERGENTE]
    		, ISNULL(D.NORMAL,0) AS [PRGRAMA NORMAL]
    	FROM   
    		CTE
    			LEFT JOIN CUENTA D ON CTE.Delegacion = D.Delegacion;

    Salida

    Básicamente, en el primer conjunto de tabla, recojo solo las delegaciones, en el segundo conjunto realizo una suma agrupada por cada delegación y predio de un 1 (esto es igual que un count), por cada repetición, pero dentro de la función sum, se establece caso de que clasificación sea= xxx, por tanto en cada fila si clasificación contiene el valor solicitado pone un 1 y sino pone null.

    A la salida de los conjuntos los igualo por delegación y muestro los datos de las sumas.

    Tablas de expresión común

    https://javifer2.blogspot.com/search/label/tablas%20de%20expresi%C3%B3n%20com%C3%BAn%20%281%29

    https://javifer2.blogspot.com/search/label/tablas%20de%20expresi%C3%B3n%20com%C3%BAn%20%282%29%20Correlativos

    No lo he metido dentro del procedure, para que valides si es realmente lo que necesites de un modo más fácil.

    miércoles, 22 de mayo de 2019 20:01