在SQL Server中使用多个条件并返回值

在SQL Server中使用多个条件并返回值,sql,sql-server,Sql,Sql Server,我有以下条件无法运行 我试过: SELECT Main_ID AS [First_Custom_Column], CASE WHEN Column_1 = 'Y' AND SUM(CASE WHEN Column_3 > 1 THEN Column_2 END) > 0 AND COUNT(CASE WHEN Column_3 > 1 THEN 2 END) > 1 # Will fail,

我有以下条件无法运行

我试过:

SELECT
    Main_ID AS [First_Custom_Column],
    CASE 
       WHEN Column_1 = 'Y' AND
            SUM(CASE WHEN Column_3 > 1 THEN Column_2 END) > 0 AND
            COUNT(CASE WHEN Column_3 > 1 THEN 2 END) > 1 # Will fail, Error below. 
           THEN 1 
           ELSE 0
    END AS [Second_Custom_Column]
FROM
    [Table_Name] 
WHERE 
    [Date] = '2020-11-01';
错误:“Main_ID”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中

然后我试了一下:

SELECT
    Main_ID AS [First_Custom_Column],
    CASE 
       WHEN Column_1 = 'Y' AND
            (CASE WHEN Column_3 > 1 THEN 1 END) > 0 AND
            (CASE WHEN Column_3 > 1 THEN 2 END) > 1
           THEN 1 
           ELSE 0
    END AS [Second_Custom_Column]
FROM 
    [Table_Name] 
WHERE 
    [Date] = '2020-11-01';
错误:varchar值“3344511715”的转换溢出了int列

我实际上是在尝试从Excel复制
COUNTIF
SUMIF
。一旦完全复制,我将把查询变成一个函数,但首先我需要它工作。第三列,
column_3
,包含重复的数据,函数将对这些数据进行计数,以查看它们是否再次出现

是否有人使用多个条件成功复制了
COUNTIF
?怎么做

让它发挥作用:

COUNT([Column_3]) OVER (PARTITION BY [Column_3] ORDER BY [Column_3]) AS [xCountIF],
SUM([Column_2]) OVER (PARTITION BY [Column_3] ORDER BY [Column_3]) AS [xSumIF]

如果有人有类似的问题,请回答此问题,我将带您浏览。

请提供示例数据和所需结果。正如错误所述,您需要在末尾添加“按主id分组”。这样做有问题吗?正如它所写的,
COUNT()
将尝试对完整的行列表进行计数。如果您需要对行的子集进行计数,您应该尝试
count()over()
。您的困惑是什么:每当您被一些错误或输出弄糊涂时,您应该将自己想象成一个DBMS,清除数据的所有上下文和含义(您不知道),然后执行编写的操作。DBMS不知道数据或语义的性质,也不知道只需查看一下就可以得到的东西。它做你要求它做的事情。@新手逐行处理是糟糕的数据库设计,这样的计算很容易用一条语句完成。因此,如果您可以更新您的问题,并提供从何处调用该函数的源数据,以及该数据与参考数据集之间的关系,以便对其进行计算,这将是一件好事。请解释此解决方案。如果它不包含任何案例,它与
计数(列3>1时的案例,然后是2结尾)
有什么关系?在分析函数中,
orderby
子句的用途是什么?“它只是工作”不是一个有用的答案,从中学习一些东西,特别是当你没有非常清楚的问题,并回答自己。