EXISTS(sql server 2014)不引入子查询时,选择列表中只能指定一个表达式

Posted

技术标签:

【中文标题】EXISTS(sql server 2014)不引入子查询时,选择列表中只能指定一个表达式【英文标题】:Only one expression can be specified in the select list when the subquery is not introduced with EXISTS(sql server 2014) 【发布时间】:2018-10-25 06:37:59 【问题描述】:
SELECT COUNT(column_1) 
FROM  table_name1 
WHERE CREATEDATE BETWEEN  (SELECT MONTH(07), YEAR(2017)FROM table_name1) 
                 AND (SELECT MONTH(11), YEAR(2017)FROM table_name1). 

我的查询如下,但我收到错误

选择列表中只能指定一个表达式,当 EXISTS 没有引入子查询。

我需要比较 @fromdate(month and year) 和 @todate(month and year)

【问题讨论】:

CREATEDATE 包含一个 single 值(每行)。您的每个子选择都返回 两个 值。你希望这如何工作? CREATEDATE 是什么数据类型? 【参考方案1】:

WHERE 中的子查询返回两个值,导致错误“只能在选择中指定一个表达式”。

您可以使用 SQL DATEFROMPARTS function 将所有三个日期(CreateDate、@fromdate 和 @todate)转换为该月年的第一天,并在 WHERE 子句中使用它们,使用 BETWEEN,如下所示。

SELECT COUNT(column_1) 
FROM  table_name1 
WHERE DATEFROMPARTS (YEAR(CreateDate),MONTH(CreateDate),1) 
      BETWEEN  DATEFROMPARTS (YEAR(@fromdate),MONTH(@fromdate),1) 
      AND DATEFROMPARTS (YEAR(@Todate),MONTH(@ToDate),1) 

【讨论】:

以上是关于EXISTS(sql server 2014)不引入子查询时,选择列表中只能指定一个表达式的主要内容,如果未能解决你的问题,请参考以下文章

sql server之exists用法

如何使用 sql server exists 子句进行优化?

sql server的exists,union,union all

SQL Server 中的 SUBQUERY 和 EXISTS

EXISTS 子句在 SQL Server 中如何工作?

EXISTS 子句的 SQL Server 查询提示