SQL Server-将NULLIF与CONVERT一起使用以计数多位字段
我有一个疑问:SQL Server-将NULLIF与CONVERT一起使用以计数多位字段,sql,sql-server,Sql,Sql Server,我有一个疑问: SELECT Percentages.ProjectID, SUM(Percentages.Percent1) + SUM(Percentages.Percent2) / ISNULL(NULLIF(CONVERT(INT, Finances.IncludeP1), 0) + NULLIF(CONVERT(INT, Finances.IncludeP2), 0), 1) FROM Percentages IN
SELECT
Percentages.ProjectID,
SUM(Percentages.Percent1) +
SUM(Percentages.Percent2) /
ISNULL(NULLIF(CONVERT(INT, Finances.IncludeP1), 0) +
NULLIF(CONVERT(INT, Finances.IncludeP2), 0), 1)
FROM
Percentages
INNER JOIN
Finances ON Percentages.ProjectID = Finances.ProjectID
GROUP BY
Percentages.ProjectID
其工作方式是这样的,当字段(Price1
)和(Price2
)的值不为零(因此可以为正或负),则名为(IncludeP1
)和(IncludeP2
)的位字段为真(1)
由于不能被零除,因此我需要能够将IncludeP1
或IncludeP2
的值设为空,或者两者都设为空。然后,ISNULL
进入,因为我希望显示原始值,所以通过将其除以1得到所需的结果
我在上述查询中遇到的错误是由于financials.IncludeP1
和financials.IncludeP2
未包含在group语句中,但将它们包含在其中意味着所需的ProjectID
分组不起作用。。。有没有办法做到这一点,或者我需要重新思考它是如何工作的
谢谢你的帮助
通过以下查询解决了此问题:
SELECT
Finances.ProjectID,
SUM(Finances.Percent1 + Finances.Percent2 + Finances.Percent3)
/
ISNULL(
NULLIF(SUM(CASE WHEN (Finances.IncludeP1 = 1) THEN 1 ELSE 0 END),0) +
NULLIF(SUM(CASE WHEN (Finances.IncludeP2 = 1) THEN 1 ELSE 0 END),0) +
NULLIF(SUM(CASE WHEN (Finances.IncludeP3 = 1) THEN 1 ELSE 0 END),0)
,1)Answer,
from Finances
group by Finances.ProjectID
示例数据和所需输出将有助于澄清此处的问题。好的,我现在将其添加进去,因此您想除以IncludeP1的
计数
?为什么您要按投影进行分组?在您的示例中,情况并非如此。是的,我想除以IncludeP1的计数,得到百分比1(按投影进行分组),然后再除以其他2个百分比
SELECT ProjectID
,AVG([Percent])
FROM Finances
CROSS APPLY (
VALUES (PercentP1, IncludeP1)
,(PercentP2, IncludeP2)
,(PercentP3, IncludeP3)
) AS T([Percent], Include)
WHERE Include = 1
GROUP BY ProjectID