Я думаю UNPIVOT даст вам такую вещь вы после этого. Что-то, как это должно работать (я намеренно упростил пример включать только три жанра, но вы должны быть в состоянии получить представление от того, что я сделал): -
SELECT MovieID, Genre, [Count]
FROM
(SELECT MovieID, Crime, Comedy, Drama --comma separated list of the genres
FROM MovieGenres) p
UNPIVOT
([Count] FOR Genre IN
(Crime, Comedy, Drama) --list genres again
) as upvt
SQLFIDDLE
Если вы только хотите, чтобы показать жанры/movieIDs, где значение равно 1, то это простой случай добавления ИНЕКЕ выше: -
SELECT MovieID, Genre, [Count]
FROM
(SELECT MovieID, Crime, Comedy, Drama --list your genres here
FROM #MovieGenres) p
UNPIVOT
([Count] FOR Genre IN
(Crime, Comedy, Drama) --list genres again, same order
) as upvt
WHERE [Count] = 1
Самый простой вариант будет хранить только те, с жанром (а не фильм «x» не является «комедией»). Итак, вы можете * сделать что-то вроде «SELECT MoveId», Действие 'WHERE Action = 1 UNION ALL SELECT MoveId,' Crime 'WHERE Crime = 1 UNION ALL - и т. Д. –
Похоже, вы хотите на самом деле правильно нормализовать это. Престижность для этого. И да, эта структура таблицы вызовет у вас боль в долгосрочной перспективе. Лучший способ справиться с этим - разделить это на три таблицы. Один для информации о фильме. Вторая таблица жанров. И третья таблица с составным ключом MovieID и GenreID. –