使用MSSQL服务器查询返回每个库的图像计数时遇到问题
我目前正在尝试将另一列(PictureCount)添加到结果集中,该列返回位于另一个表的每个唯一库中的图像计数。(GalleryID将它们链接在一起。)每个GalleryID可以有3到20个MediaID与它们关联 我不是SQL方面的专家,所以我需要一些帮助。我甚至不确定是否有可能返回我正在寻找的计数 谢谢 SQL FIDLE可帮助您: 这是我当前的查询,它返回我所需要的所有内容,除了一个计数列,我不知道该怎么做使用MSSQL服务器查询返回每个库的图像计数时遇到问题,sql,sql-server,database,tsql,Sql,Sql Server,Database,Tsql,我目前正在尝试将另一列(PictureCount)添加到结果集中,该列返回位于另一个表的每个唯一库中的图像计数。(GalleryID将它们链接在一起。)每个GalleryID可以有3到20个MediaID与它们关联 我不是SQL方面的专家,所以我需要一些帮助。我甚至不确定是否有可能返回我正在寻找的计数 谢谢 SQL FIDLE可帮助您: 这是我当前的查询,它返回我所需要的所有内容,除了一个计数列,我不知道该怎么做 WITH CTE AS ( SELECT a.GalleryTitle,
WITH CTE AS (
SELECT a.GalleryTitle, a.GalleryDate, b.*,
ROW_NUMBER() OVER (PARTITION BY a.GalleryID, a.GalleryTitle, a.GalleryDate
ORDER BY b.MediaThumb DESC) AS Rn
FROM Media b
INNER JOIN Galleries A
ON a.GalleryID = b.GalleryID
WHERE b.IsPlug = 0 AND b.IsHidden = 0
),
CTE2 AS
(
SELECT a.GalleryTitle, a.GalleryDate, b.*,
1 Rn
FROM Media b
LEFT OUTER JOIN Galleries A
ON a.GalleryID = b.GalleryID
)
SELECT *, NewID = NEWID() FROM CTE WHERE rn = 1 and MediaTypeID = 4
UNION ALL
SELECT *, NewID = NEWID() FROM CTE2 WHERE rn = 1 and MediaTypeID = 4 and GalleryID is NULL
ORDER BY GalleryDate DESC, GalleryID DESC
这应该起作用:
WITH cte As
(
SELECT
a.GalleryID As GalleryID_A,
a.GalleryTitle,
a.GalleryDate,
b.*,
-- You only need to partition by GalleryID:
ROW_NUMBER() OVER (PARTITION BY b.GalleryID ORDER BY b.MediaThumb DESC) As Rn,
-- This will return the number of media records per gallery:
COUNT(1) OVER (PARTITION BY b.GalleryID) As Rc
FROM
Media As b
-- The LEFT JOIN will include media with no gallery,
-- so your second CTE is not needed:
LEFT JOIN Gallery As A
ON b.GalleryID = A.GalleryID
WHERE
-- This filter needs to be within the CTE,
-- otherwise you'll exclude galleries where the last
-- media is not type 4:
b.MediaTypeID = 4
)
SELECT
*
FROM
cte
WHERE
rn = 1
ORDER BY
GalleryDate DESC,
GalleryID DESC
;
这应该起作用:
WITH cte As
(
SELECT
a.GalleryID As GalleryID_A,
a.GalleryTitle,
a.GalleryDate,
b.*,
-- You only need to partition by GalleryID:
ROW_NUMBER() OVER (PARTITION BY b.GalleryID ORDER BY b.MediaThumb DESC) As Rn,
-- This will return the number of media records per gallery:
COUNT(1) OVER (PARTITION BY b.GalleryID) As Rc
FROM
Media As b
-- The LEFT JOIN will include media with no gallery,
-- so your second CTE is not needed:
LEFT JOIN Gallery As A
ON b.GalleryID = A.GalleryID
WHERE
-- This filter needs to be within the CTE,
-- otherwise you'll exclude galleries where the last
-- media is not type 4:
b.MediaTypeID = 4
)
SELECT
*
FROM
cte
WHERE
rn = 1
ORDER BY
GalleryDate DESC,
GalleryID DESC
;
哇,谢谢Richard的快速回答和完美的答案。亲切的问候!哇,谢谢Richard的快速回答和完美的答案。亲切的问候!