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,union,union all