【发布时间】:2020-12-03 05:58:07
【问题描述】:
我有以下标准不会运行。
我试过了:
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 的多个条件?怎么样?
【问题讨论】:
-
请提供样本数据和期望的结果。
-
正如错误所说,您需要在末尾添加“group by main_id”。这样做有问题吗?
-
正如它所写的,
COUNT()将尝试计算完整的行列表。如果您需要计算行的子集,您应该尝试COUNT() OVER()。 -
你的困惑怎么办:每次你对一些错误或输出感到困惑时,你应该想象自己是一个 DBMS,清除数据的所有上下文和含义(你不知道),然后做什么是写的。 DBMS 不知道您的数据或语义的性质,也不知道您只需看一眼就可以得到的东西。它会做你要求它做的事情。
-
@Rookie 逐行处理是糟糕的数据库设计,这样的计算可以用单个语句轻松完成。因此,如果您可以更新您的问题并提供您想要调用该函数的源数据以及该数据与参考数据集之间的关系以对其进行计算,那将是一件好事。
标签: sql sql-server