none
Valor Max y Min RRS feed

  • Pregunta

  • hola buenos días, tengo una duda si lo siguiente se podría hacer por medio de sql

    tengo la siguiente tabla TODOS los campos son de tipo varchar

    tienda, marca, modelo, medida 

    1        ,  yyy,    2    ,  20

    1        , yyy,    2    ,  21

    1        , yyy,   2     ,   22

    1        , yyy,   2     ,   23

    2        , aaa,   34     ,   25

    2        , aaa,   34     ,   26

    2        , aaa,   34     ,   27

    el usuario puede introducir filtros por tienda, marca, modelo y medida   

    pero suponiendo que el usuario no introduce filtros debe traerme todos los datos acomodados de la siguiente forma

    tienda, marca, modelo, medida, medida2, medida3, medida4

    1        ,  yyy,    2    ,       20    ,     21     ,     22     ,     23

    2        , aaa,   34     ,   25      ,   26       ,     27

    si pudieran ayudarme se los agradecería mucho

    sábado, 27 de mayo de 2017 17:47

Respuestas

  • ¿La máxima cantidad de medidas son cuatro(4)?, de ser así la consulta de selección se hace simple: agrupa, sumariza y escribe el valor resumen en tantas columnas consideres necesario, por ejemplo:

    WITH T AS
    (
        SELECT
    	   t1.tienda, t1.marca, t1.modelo,
    	   ROW_NUMBER() OVER(PARTITION BY t1.tienda, t1.marca, t1.modelo
    		  ORDER BY t1.medida) AS R
        FROM
    	   NombreTabla t1
    )
    SELECT 
        t1.tienda, t1.marca, t1.modelo,
        MAX(CASE WHEN t1.R = 1 THEN t1.medida) AS [medida 1],
        MAX(CASE WHEN t1.R = 2 THEN t1.medida) AS [medida 2],
        MAX(CASE WHEN t1.R = 3 THEN t1.medida) AS [medida 3],
        MAX(CASE WHEN t1.R = 4 THEN t1.medida) AS [medida 4]
    FROM
        T t1
    GROUP BY
        t1.tienda, t1.marca, t1.modelo;
    GO

    Si por el contrario se trata de "n" medidas entonces una solución es transponer las filas a columnas de manera dinámica ejecutando el texto de una consulta. Otra forma es contener el valor de todas las medidas en una sola columna, algo como:

    1 | yyyy | 2 | 20, 21, 22, 23

    2 | aaaa | 3 | 25, 26, 27


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 27 de mayo de 2017 22:53
  • Hola, si puede hacer por sql parece un caso clásico de pivot  en caso que sepas exactamente cuantas columnas vas a devolver,en caso que no puedes utilizar tambien pivot dinámico


    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala.Saludos. Lima-Perú.

    sábado, 27 de mayo de 2017 18:03

Todas las respuestas

  • Hola, si puede hacer por sql parece un caso clásico de pivot  en caso que sepas exactamente cuantas columnas vas a devolver,en caso que no puedes utilizar tambien pivot dinámico


    Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala.Saludos. Lima-Perú.

    sábado, 27 de mayo de 2017 18:03
  • ¿La máxima cantidad de medidas son cuatro(4)?, de ser así la consulta de selección se hace simple: agrupa, sumariza y escribe el valor resumen en tantas columnas consideres necesario, por ejemplo:

    WITH T AS
    (
        SELECT
    	   t1.tienda, t1.marca, t1.modelo,
    	   ROW_NUMBER() OVER(PARTITION BY t1.tienda, t1.marca, t1.modelo
    		  ORDER BY t1.medida) AS R
        FROM
    	   NombreTabla t1
    )
    SELECT 
        t1.tienda, t1.marca, t1.modelo,
        MAX(CASE WHEN t1.R = 1 THEN t1.medida) AS [medida 1],
        MAX(CASE WHEN t1.R = 2 THEN t1.medida) AS [medida 2],
        MAX(CASE WHEN t1.R = 3 THEN t1.medida) AS [medida 3],
        MAX(CASE WHEN t1.R = 4 THEN t1.medida) AS [medida 4]
    FROM
        T t1
    GROUP BY
        t1.tienda, t1.marca, t1.modelo;
    GO

    Si por el contrario se trata de "n" medidas entonces una solución es transponer las filas a columnas de manera dinámica ejecutando el texto de una consulta. Otra forma es contener el valor de todas las medidas en una sola columna, algo como:

    1 | yyyy | 2 | 20, 21, 22, 23

    2 | aaaa | 3 | 25, 26, 27


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    sábado, 27 de mayo de 2017 22:53