2015-08-24 3 views
-1

Я ищу некоторые данные фильма из IMDb, и я нашел ограничение в своих знаниях. Вот данные, которые я смотрю на:Невозможные жанры фильмов

enter image description here

Я думаю, что возникнут проблемы с этой текущей таблицы. Как я могу получить его так, что есть два столбца, MovieID и жанр? Это приведет к тому, что MovieID не будет отличаться. Не потребует ли этого отсрочки?

Любая помощь была бы высоко оценена!

+1

Самый простой вариант будет хранить только те, с жанром (а не фильм «x» не является «комедией»). Итак, вы можете * сделать что-то вроде «SELECT MoveId», Действие 'WHERE Action = 1 UNION ALL SELECT MoveId,' Crime 'WHERE Crime = 1 UNION ALL - и т. Д. –

+1

Похоже, вы хотите на самом деле правильно нормализовать это. Престижность для этого. И да, эта структура таблицы вызовет у вас боль в долгосрочной перспективе. Лучший способ справиться с этим - разделить это на три таблицы. Один для информации о фильме. Вторая таблица жанров. И третья таблица с составным ключом MovieID и GenreID. –

ответ

1

Я не могу видеть скриншот, так что я угадал в колоннах, но что-то вдоль линий:

SELECT MovieID, "Horror" As Genre 
WHERE Horror = 1 
UNION ALL 
SELECT MovieID, "Comedy" As Genre 
WHERE Comedy = 1 
UNION ALL 
SELECT MovieID, "Drama" As Genre 
WHERE Drama = 1 
UNION ALL 
... 
0

Я думаю 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