【问题标题】:Only one expression can be specified in the select list when the subquery is not introduced with EXISTS(sql server 2014)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 是什么数据类型?

标签: sql-server subquery


【解决方案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) 

【讨论】:

    猜你喜欢
    • 2020-01-24
    • 1970-01-01
    • 2011-09-24
    • 2018-04-14
    相关资源
    最近更新 更多