Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server-将NULLIF与CONVERT一起使用以计数多位字段_Sql_Sql Server - Fatal编程技术网

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