【问题标题】:how to get the unique records from the table in sql server 2008如何从 sql server 2008 中的表中获取唯一记录
【发布时间】:2012-01-30 20:31:30
【问题描述】:

我有 3 张桌子

  • crossarticle_article -- 文章详细信息的存储位置。
  • crossarticle_category -- 存储类别详细信息的位置。
  • crossarticle_articletocategory -- 存储文章和类别映射的位置..(这是因为一篇文章可能存在于多个类别中)
  • 现在我想根据所有三个表的连接来获取文章,但问题是如果我这样做,我会得到重复的文章标题,因为同一篇文章可能属于多个类别,所以没有也使用 group by。我需要 crossarticle_category 连接,因为该表中存在类别名称。即使我跳过该表,crossarticle_articletocategory 仍然具有类别和文章的映射。所以我仍然会得到重复的文章标题,任何人都可以建议我一些查询,这样我就不会得到重复的文章标题。

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

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

    您可以右键单击并在新窗口中打开,以查看正确的视图,在结果集中您可以看到标题重复。

    【问题讨论】:

    • 您想对结果中的类别做什么 - 计数?逗号分隔列表?如果您有多个类别,您到底期望什么?
    • 另外,你应该发布你的表的细节——或者其中一些——这样我们就可以编写可以工作的sql。
    • 你能发布你想要的输出吗?一个样本会很棒。
    • @Abbas - 请参阅下面的示例,了解如何获取每篇文章一行的字母逗号分隔列表。

    标签: sql-server-2008 tsql group-by


    【解决方案1】:

    这样的事情会起作用:

      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
    

    【讨论】:

    • 实际上我只想记录那篇文章,因为我将有一个链接,可以一次记录任何一个部分。所以特定类别的前 1 条最新记录
    • 嗨,霍根,我想这对我有用,只是一个问题,我可以在“,”之前获得第一个类别
    • 我不确定我是否理解,您只想要一个类别?那么,在您的数据库中拥有多个类别有什么意义呢?
    【解决方案2】:

    使用distinct 修饰符:SELECT distinct article_title

    【讨论】:

    • 这不包括类别 -- 原始请求的一部分。
    • 这只有在您获得独特的标题时才有效。如果你想(以某种方式)包含文章所属的类别,它会变得有点复杂。
    • @Hogan 可能是我,但我没有看到他要求这样的事情。如果他想要别的东西,他应该更详细地提出他的问题。
    • 我的问题已经很详细了,大家可以看看
    • 如果你想让类别连接起来,那么你必须安装一个自定义聚合函数:msdn.microsoft.com/en-us/library/ms182741.aspx(见页面底部)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多