Consulta de resumen de varios campos en SQL

votos
1

La estructura de la tabla de datos es:
id1, id2, id3, id4, ... (algunos otros campos).
Deseo crear una consulta de resumen para averiguar cuántas veces se usa algún valor de ID en cada columna.

Datos
1,2,3,4,2008
2,3,5,1,2008
1,3,2,5,2007
1,2,3,6,2007
3,1,2,5,2007

Para el valor 1, el resultado debe ser
1,0,0,1,2008
2,1,0,0,2007

Cómo lograr esto con una consulta (en MySQL).

Publicado el 09/12/2008 a las 20:32
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
1

Esta parece ser la mejor solución (de Wiki ):

select years,
sum(1*(1-abs(sign(id1-56)))) as id1,
sum(1*(1-abs(sign(id2-56)))) as id2,
sum(1*(1-abs(sign(id3-56)))) as id3,
sum(1*(1-abs(sign(id4-56)))) as id4,
from mytable
group by years
Respondida el 09/12/2008 a las 21:22
fuente por usuario

votos
1

Use una función característica o delta:

DECLARE @look_for AS int
SET @look_for = 1

SELECT SUM(CASE WHEN id1 = @look_for THEN 1 ELSE 0 END) AS id1_count
    ,SUM(CASE WHEN id2 = @look_for THEN 1 ELSE 0 END) AS id2_count
    ,SUM(CASE WHEN id3 = @look_for THEN 1 ELSE 0 END) AS id3_count
    ,SUM(CASE WHEN id4 = @look_for THEN 1 ELSE 0 END) AS id4_count
FROM tbl

Hay formas de generar código esto (también una técnica usando PIVOT y UNPIVOT en SQL Server que no es ANSI) basado en su tabla y los distintos valores de ID también.

Respondida el 09/12/2008 a las 20:43
fuente por usuario

votos
0

seleccionar

(seleccione conteo (id1) de t1 donde id1 = @param) como id1,

(seleccione conteo (id2) de t2 donde id2 = @param) como id2

Respondida el 09/12/2008 a las 20:47
fuente por usuario

votos
-1

si X es el valor de identificación que está buscando, lo haría algo como esto.

select (select count(*) where id1 = X) as countid1 ... etc
Respondida el 09/12/2008 a las 20:43
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more