在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
子句的用途是什么?“它只是工作”不是一个有用的答案,从中学习一些东西,特别是当你没有非常清楚的问题,并回答自己。