SQL Server 2008 GROUP BY - PullRequest
       24

SQL Server 2008 GROUP BY

0 голосов
/ 16 июля 2011

Я застрял и пытаюсь найти решение, поэтому, пожалуйста, помогите!

У меня есть 3 таблицы:

Books (id, title, ...)

Authors (id, name, surname, ...)

book_authors (bookID, authorID, whatisdoing)

Теперь я хочу получить все книги в зависимости от названия (поиск пользователя) и всей остальной информации (имя автора, фамилия). Но я хочу, чтобы названия книг были уникальными, чтобы отображался только первый экземпляр book_authors.whatisdoing.

В MS Access я достиг этого с помощью функции first, но теперь first не работает, а с min я не получил желаемых результатов.

Любая помощь будет признательна.

Запрос в Access был:

SELECT 
    First(book_authos.whatisdoing) AS FirstOfidiothta_ID, 
    First(authors.name) AS onoma, 
    First(authors.surname) AS eponymo, 
    books.ID, books.title, books.photoLink
FROM (books 
INNER JOIN book_authors ON books.ID = book_authors.book_ID) 
INNER JOIN authors ON book_authors.author_ID = authors.ID 
GROUP BY 
    books.ID, books.titlos, books.photoLink, books.active 
HAVING 
    (((books.titlos) Like '%" & textString & "%') AND 
    ((books.active)=True) AND ((First(authors.active))=True)) 
ORDER BY 
    First(book_authos.whatisdoing), books.title

1 Ответ

0 голосов
/ 16 июля 2011

РЕДАКТИРОВАТЬ: Изменено на основе комментариев OP.
РЕДАКТИРОВАТЬ 2: Исправлено для исправления ошибок.

Вы можете попробовать это.

SELECT aba.name, aba.surname, aba.whatisdoing,
    b.ID, b.title, b.photoLink
FROM Books b
JOIN
    (
    SELECT ba.bookID, ba.whatisdoing, a.name, a.surname,
      ROW_NUMBER() OVER (PARTITION BY ba.bookID ORDER BY ba.whatisdoing) AS sequence
    FROM book_authors ba
    JOIN Authors a ON ba.authorID = a.id
    WHERE a.active = 1
    ) AS aba ON b.id = aba.bookID
WHERE b.title LIKE '%' + @textString + '%'
    AND b.active = 1
    AND aba.sequence = 1

Функция ROW_NUMBER назначает строкуномер строки на основе групп, определенных в предложении PARTITION BY, и порядка, определенного в предложении ORDER BY.

@ textString - переменная SQL Server.Я не уверен, как вы могли бы назначить это в вашей ситуации.

Логическим типом данных является BIT в SQL Server, и значения равны 0 для false и 1 для true.

...