此查询可能有什么问题:
SELECT
SUM(CASE
WHEN (SELECT TOP 1 ISNULL(StartDate,'01-01-1900')
FROM TestingTable
ORDER BY StartDate Asc) <> '01-01-1900' THEN 1 ELSE 0 END) AS Testingvalue.
得到错误:
无法对包含聚合或子查询的表达式执行聚合函数。
答案 0 :(得分:1)
正如koppinjo所述,您当前(已损坏)的查询正在检查您的表格中是否有NULL
- 值(或StartDate = '01-01-1900'
),请返回1
或0
取决于哪个,然后尝试SUM
该单个值。
您需要两种不同的逻辑事物。
获取具有StartDate
的行数或检查是否缺少任何行StartDate
。
SELECT --Checking if there is a NULL-value in table
(
CASE WHEN
(SELECT TOP 1 ISNULL(StartDate,'01-01-1900')
FROM TestingTable
ORDER BY StartDate Asc) <> '01-01-1900' THEN 1
ELSE 0
END
) AS TestingValue
SELECT SUM(TestingValue) TestingValue --Give the count of how many non-NULLs there is
FROM
(
SELECT
CASE WHEN
ISNULL(StartDate,'01-01-1900') <> '01-01-1900' THEN 1
ELSE 0
END AS TestingValue
FROM TestingTable
) T
这是SQL Fiddle并排显示两个输出。
答案 1 :(得分:0)
很难说,但你可能想要这样的东西:
SELECT
SUM(TestingValue)
FROM
(SELECT
CASE
WHEN ISNULL(StartDate,'01-01-1900') <> '01-01-1900'
THEN 1
ELSE 0
END AS TestingValue
FROM TestingTable) t
由于您的原始查询现在已经写入,您的子查询将总返回1个值,因此您的总和将始终为1或0,更不用说它是非法的。为了解决这个问题,这个SQL会将case语句应用于TestingTable中的每一行,并将结果插入到派生表(t)中,然后将&#39;外部&#39;选择将对结果求和。希望这有帮助!