如何将此SQL查询加入另一个表?

时间:2009-08-17 12:04:20

标签: sql sql-server-2008 stored-procedures

我有以下SQL查询,到目前为止它的工作方式应该是这样,并获得我存储在tagmap表中的前40个标记ID。

SELECT TOP 40
tbrm_TagMap.TagID,
Count(*)
FROM tbrm_TagMap
GROUP BY tbrm_TagMap.TagID
ORDER BY COUNT(tbrm_TagMap.TagID) DESC

我还想加入Tags表,其中包含每个TagID的实际名称。我做的每次尝试都会返回错误。我怎样才能做到这一点?我正在使用SQL 2008。

4 个答案:

答案 0 :(得分:5)

SELECT  *
FROM    (
        SELECT  TOP 40 
                tbrm_TagMap.TagID, COUNT(*) AS cnt
        FROM    tbrm_TagMap
        GROUP BY
                tbrm_TagMap.TagID
        ORDER BY
                COUNT(*) DESC
        ) q
JOIN    Tags
ON      Tags.id = q.TagID
ORDER BY
        cnt DESC

答案 1 :(得分:1)

我的猜测是,当你加入tags时,你没有将它包含在group by子句中,这将始终通过SQL Server中的错误。每个未汇总但返回的列都需要位于group by

尝试这样的事情:

SELECT TOP 40
    tbrm_TagMap.TagID,
    t.Tag,
    Count(*)
FROM 
    tbrm_TagMap
    INNER JOIN tags t ON
        tbrm_TagMap.TagID = t.TagID
GROUP BY 
    tbrm_TagMap.TagID, 
    t.Tag
ORDER BY 3 DESC

答案 2 :(得分:1)

SELECT TOP 40
tbrm_TagMap.TagID, Tags.TagName Count(*)
FROM tbrm_TagMap INNER JOIN Tags ON tbrm_TagMap.TagID = Tags.TagID
GROUP BY tbrm_TagMap.TagID, Tags.TagName
ORDER BY COUNT(tbrm_TagMap.TagID) DESC

答案 3 :(得分:1)

试试这个..

SELECT top 40 tags.TagDescription, tbrm_TagMap.TagID, Count(*)
FROM tbrm_TagMap
    INNER JOIN Tags 
       ON TagMap.TagID = Tags.TagId
GROUP BY tags.TagDescription, tbrm_TagMap.TagID
ORDER BY COUNT(tbrm_TagMap.TagID) DESC