【发布时间】:2014-12-23 23:28:20
【问题描述】:
我正在尝试根据特定列的计数来创建求和。如果您查看下面 Select 中的最后一行,您会发现我尝试实现 CASE 语句。但是,它会生成所有 NULL 值。我相信我理解为什么(每一行都有一组唯一的值),但我不确定如何解决我的问题。
SELECT
TotalFilesProduced.ReviewDate,
TotalFilesProduced.FileReviewedByUserID,
TotalFilesProduced.FileSource,
TotalFilesProduced.FilesIndexed TotalIndexed,
TotalFilesProduced.FileNumberofPages TotalFileNumberofPages,
TotalFilesProduced.FilesProduced,
CASE WHEN COUNT(DISTINCT FileReviewedByUserID) > 1 THEN SUM(TotalFilesProduced.FilesIndexed) END
FROM
(SELECT
CAST(ibfp.FileReviewedDate AS DATE) ReviewDate,
ibfp.FileReviewedByUserID,
FileSource,
COUNT(*) FilesProduced,
COUNT(DISTINCT ibf.InboundFileID) FilesIndexed,
SUM(CASE WHEN ibfp.FromPage = ibfp.ToPage THEN 1
ELSE ibfp.ToPage-ibfp.FromPage + 1 END) [FileNumberofPages]
FROM
dbo.InboundFilePartitions ibfp
INNER JOIN dbo.InboundFiles ibf ON ibfp.InboundFileID = ibf.InboundFileID
WHERE
CAST(ibfp.FileReviewedDate AS DATE) >= '10/22/2014'
and CAST(ibfp.FileReviewedDate AS DATE) <= '10/22/2014'
and ibf.ProjectID in (110)
GROUP BY
CAST(ibfp.FileReviewedDate AS DATE),
ibfp.FileReviewedByUserID,
FileSource
) TotalFilesProduced
GROUP BY
TotalFilesProduced.ReviewDate,
TotalFilesProduced.FileReviewedByUserID,
TotalFilesProduced.FileSource,
TotalFilesProduced.FilesIndexed,
TotalFilesProduced.FileNumberofPages,
TotalFilesProduced.FilesProduced
这是一个进一步说明的示例 - 这里产生 NULL 的 UserID 1036 很好,因为它只出现一次,但对于 804 - 我想对 TotalIndexed 列求和,因此 NULL 区域应为 139 (对于出现 804 的两种情况)
ReviewDate | FilereviewedByUserID | FileSource | TotalIndexed | TotalFileNumberofPages | FilesProduced | (No Column Name) /*My Sum*/
------------------------------------------------------------------------------------------------------------------------------------
2014-10-22 | 804 | 1 | 1 | 67 | 1 | NULL
------------------------------------------------------------------------------------------------------------------------------------
2014-10-22 | 1036 | 1 | 1 | 17 | 1 | NULL
------------------------------------------------------------------------------------------------------------------------------------
2014-10-22 | 804 | 2 | 138 | 3322 | 184 | NULL
【问题讨论】:
-
因为
FileReviewedByUserID和FilesIndexed在您的GROUP BY语句中,所以这些总和永远不会超过一。您能澄清一下您要计算的内容吗? -
FilereviewedByUserID - 如果用户出现多次(计数 - 我决定使用),则将其 TotalIndexed 列相加
-
第三次了。计数组永远不会> 1。投票结束,因为不清楚您要做什么。
-
我不知道如何更清楚地解释它 - 如果用户 ID 显示不止一次 - 我希望将上面显示的 TotalIndexed 列加在一起。我知道分组使其不确定 - 但如果没有分组,查询甚至不会运行 - 因为我在 CASE 中使用了计数和总和。
-
不,你没有解释你想要什么。用清晰的语言在问题中解释你想要什么。使用 group by 来运行查询并不能解决任何问题。