Сводный запрос из нескольких полей в SQL

голоса
1

Структура таблицы данных является:
ID1, ID2, id3, id4, ... (другие поля).
Я хочу создать сводной запрос , чтобы узнать, сколько раз некоторые ID значение используется в каждом столбце.

Данные
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

Для значения 1, результат должен быть
1,0,0,1,2008
2,1,0,0,2007

Как сделать это с одним запросом (в MySQL).

Задан 09/12/2008 в 20:32
источник пользователем
На других языках...                            


4 ответов

голоса
1

Это кажется , что лучшее решение (из Вики ):

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
Ответил 09/12/2008 в 21:22
источник пользователем

голоса
1

Используйте характерную или дельта-функции:

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

Есть способы Сгенерировать код этого (также технику с помощью PIVOT и UNPIVOT в SQL Server, который не является ANSI) на основе вашей таблицы и различные значения ID также.

Ответил 09/12/2008 в 20:43
источник пользователем

голоса
0

Выбрать

(Выберите количество (id1) из t1, где ID1 = @param) как id1,

(Выберите количество (id2) от t2, где ID2 = @param) как id2

Ответил 09/12/2008 в 20:47
источник пользователем

голоса
-1

если X является значение идентификатора вы ищете, вы могли бы сделать это что-то вроде этого.

select (select count(*) where id1 = X) as countid1 ... etc
Ответил 09/12/2008 в 20:43
источник пользователем

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