Как получить уникальные записи из таблицы в SQL Server 2008 - PullRequest
1 голос
/ 31 декабря 2011

у меня 3 стола

crossarticle_article - Где хранятся подробности статьи. crossarticle_category - Где хранятся данные категории. crossarticle_articletocategory - Где хранятся отображения статей и категорий .. (это потому, что статья может существовать в нескольких категориях)

Теперь я хочу получить статью на основе объединений всех трех таблиц, но проблема в том, что если я это сделаю, я получу повторный заголовок статьи, поскольку одна и та же статья может быть в нескольких категориях, поэтому нет использование группы тоже. мне нужно соединение crossarticle_category, потому что в этой таблице есть имя категории. и даже если я пропущу эту таблицу, в crossarticle_articletocategory все еще есть отображение категории и статьи. тем не менее, я получу повторное название статьи, может кто-нибудь предложить мне какой-нибудь запрос, чтобы я не получал повторные заголовки статей.

****************************UPDATED QUESTION*************************

http://www.prosoundnetwork.com/uploadedImages/ProAudioReview/Forum/PAR_Forum/Sample2/sqlquery.png

Вы можете щелкнуть правой кнопкой мыши и открыть в новом окне, чтобы увидеть правильное представление, в наборе результатов вы можете увидеть повторы заголовков.

Ответы [ 2 ]

2 голосов
/ 31 декабря 2011

Примерно так будет работать:

  SELECT TOP 5 CA.Id AS ArticleID, CA.Title as ArticleTitle,
     stuff( (SELECT ', '+CC.Name
             FROM  CrossArticle_ArticleToCategory A2C 
             INNER JOIN CrossArticle_Category CC ON A2C.CategoryId = CC.Id
             WHERE A2C.ArticleId = CA.Id
             ORDER BY CC.Name
             FOR XML PATH ('')
            ), 1, 2, '') as Categories
  FROM CrossArticle_Article CA

Это даст вам по одной строке на статью со списком категорий через запятую. Это будет выглядеть так (я проверял, поэтому правильно):

ArticleID   Article Title              Categories 
5685        AlkjTechv                  Hardware
5684        Show Report...             Gear, News
5683        Radi-something introduces  Gear, News

У меня есть только 3 ответа, потому что вы дали только пример данных для 3 результатов.

Как примечание: это намного быстрее, чем пользовательский агрегат.


Если категории не имеют значения, такой выбор даст вам все названия:

  SELECT TOP 5 CA.Id AS ArticleID, CA.Title as ArticleTitle,
  FROM CrossArticle_Article CA
2 голосов
/ 31 декабря 2011

Используйте модификатор distinct: SELECT distinct article_title.

...