【问题标题】:Having trouble with query and subquery: SQL Subquery returned more than 1 value查询和子查询遇到问题:SQL 子查询返回超过 1 个值
【发布时间】:2019-03-13 13:13:32
【问题描述】:

这是我正在尝试运行但出现错误的内容。有什么想法吗?

SELECT 
   Client_Account_Name, 
   (
       select Distinct t1.Contact_email as temp3 
       from Order_Log_SFDC t1
       inner join
       (
          select max(Event_Date_Time) Event_Date_Time, Client_Account_Name
          from Order_Log_SFDC
          group by Client_Account_Name
       )  t2 on t1.Client_Account_Name = t2.Client_Account_Name
              and t1.Event_Date_Time = t2.Event_Date_Time
   ) as Email,

    MIN(Source) as source, 
    SUM(Final_Quote) as Total, 
    MIN(Event_Date_Time) AS min_date, 
    Max(Event_Date_Time) as max_date, 
    count(Distinct Event_Date_Time) as numOrders

FROM Order_Log_SFDC
Group By Client_Account_Name

这是错误:

SQL 错误 [512] [21000]: 子查询返回的值超过 1 个。
当子查询跟随 =、!=、、>= 或当子查询用作表达式时,这是不允许的。
SQL 错误 [512] [21000]: 子查询返回超过 1 个值。
当子查询跟随 =、!=、、>= 或当子查询用作表达式时,这是不允许的。
SQL 错误 [512] [21000]: 子查询返回超过 1 个值。
当子查询跟随 =、!=、、>= 或当子查询用作表达式时,这是不允许的。
SQL 错误 [512] [21000]: 子查询返回超过 1 个值。
当子查询跟随 =、!=、、>= 时,这是不允许的 或者当子查询用作表达式时。
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
游标未声明。

【问题讨论】:

  • 您好,欢迎来到 SO。鉴于错误消息,我猜您正在使用 sql server?标记为 mysql sql server 时必须小心。此错误是因为您将子查询作为列。如果该子查询返回超过 1 行,则引擎不知道如何处理它。不太确定为什么这里有三个查询都打到同一张表。 Here 是一个很好的起点。

标签: sql-server


【解决方案1】:

这样试试吧……

SELECT
    Client_Account_Name,
    Email = CONVERT(VARCHAR(200), SUBSTRING(MAX(CONVERT(BINARY(8), Event_Date_Time) + CONVERT(VARBINARY(200), Contact_email)), 9, 200)),
    source  = MIN(Source),
    Total = SUM(Final_Quote),
    min_date = MIN(Event_Date_Time),
    max_date = MAX(Event_Date_Time),
    numOrders = COUNT(DISTINCT Event_Date_Time)
FROM
    Order_Log_SFDC
GROUP BY
    Client_Account_Name;

【讨论】:

  • 非常感谢。不过,我还有另一个问题。我正在尝试将具有相同列的两个表合并到一个临时表中,然后从合并的数据中获取结果,但收到错误消息“无效的对象名称 ##t'
  • 这只是意味着您正在尝试引用尚未创建或已删除的全局临时表。
  • 我刚刚通过更新我的原始帖子上传了我正在使用的代码,因为它作为评论发布太长了。我正在创建临时表,并且只将其删除到最后,但由于某种原因,代码在失败之前运行了一段时间。
  • 在得到答案后,请不要改变问题的基础。请用您的新问题创建一个新线程。
  • 有道理!谢谢!
【解决方案2】:
SELECT 
   Client_Account_Name, 
   (
       SELECT TOP 1 Contact_email 
       FROM Order_Log_SFDC t2
       WHERE t2.Client_Account_Name = t1.Client_Account_Name
       ORDER BY Event_Date_Time DESC
   ) As Email,
   MIN(Source) as source, 
   SUM(Final_Quote) as Total, 
   MIN(Event_Date_Time) AS min_date, 
   Max(Event_Date_Time) as max_date, 
   count(Distinct Event_Date_Time) as numOrders

FROM Order_Log_SFDC t1
Group By Client_Account_Name

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2015-01-08
    • 2013-04-29
    • 2013-05-10
    相关资源
    最近更新 更多