【问题标题】:This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression当子查询跟随 =、!=、<、<=、>、>= 或当子查询用作表达式时,这是不允许的
【发布时间】:2013-09-14 18:35:35
【问题描述】:

我在执行此查询时遇到问题。请在下面查看我的代码。

   SELECT        (SELECT        COUNT(FilteredAppointment.activitytypecodename) AS Expr1
                      FROM            FilteredBusinessUnit INNER JOIN
                                                FilteredSystemUser ON FilteredBusinessUnit.businessunitid = FilteredSystemUser.businessunitid INNER JOIN
                                                FilteredAppointment ON FilteredSystemUser.systemuserid = FilteredAppointment.createdby
                      WHERE        (FilteredBusinessUnit.name IN (@Branch))) AS Appointment,
                         (SELECT        COUNT(FilteredLead.leadid) AS Expr1
                           FROM            FilteredBusinessUnit AS FilteredBusinessUnit_7 INNER JOIN
                                                     FilteredSystemUser AS FilteredSystemUser_7 ON FilteredBusinessUnit_7.businessunitid = FilteredSystemUser_7.businessunitid INNER JOIN
                                                     FilteredLead ON FilteredSystemUser_7.systemuserid = FilteredLead.createdby
                           WHERE        (FilteredBusinessUnit_7.name IN (@Branch)) AND (FilteredLead.new_referraltypename = 'Bank Staff')) AS Bank_Staff_Referral,
                         (SELECT        COUNT(FilteredLead_3.leadid) AS Expr1
                           FROM            FilteredBusinessUnit AS FilteredBusinessUnit_6 INNER JOIN
                                                     FilteredSystemUser AS FilteredSystemUser_6 ON FilteredBusinessUnit_6.businessunitid = FilteredSystemUser_6.businessunitid INNER JOIN
                                                     FilteredLead AS FilteredLead_3 ON FilteredSystemUser_6.systemuserid = FilteredLead_3.createdby
                           WHERE        (FilteredBusinessUnit_6.name IN (@Branch)) AND (FilteredLead_3.new_referraltypename = 'Existing Customer')) AS Customer_Referral,
                         (SELECT        COUNT(Filterednew_discoveryinterview.activityid) AS Expr1
                           FROM            FilteredBusinessUnit AS FilteredBusinessUnit_5 INNER JOIN
                                                     FilteredSystemUser AS FilteredSystemUser_5 ON FilteredBusinessUnit_5.businessunitid = FilteredSystemUser_5.businessunitid INNER JOIN
                                                     Filterednew_discoveryinterview ON FilteredSystemUser_5.systemuserid = Filterednew_discoveryinterview.createdby
                           WHERE        (FilteredBusinessUnit_5.name IN (@Branch))) AS Discovery_Interview,
                         (SELECT        COUNT(FilteredLead_2.leadid) AS Expr1
                           FROM            FilteredBusinessUnit AS FilteredBusinessUnit_4 INNER JOIN
                                                     FilteredSystemUser AS FilteredSystemUser_4 ON FilteredBusinessUnit_4.businessunitid = FilteredSystemUser_4.businessunitid INNER JOIN
                                                     FilteredLead AS FilteredLead_2 ON FilteredSystemUser_4.systemuserid = FilteredLead_2.createdby
                           WHERE        (FilteredBusinessUnit_4.name IN (@Branch))) AS Generated_Leads,

(选择名称 FROM 过滤的业务单元 WHERE (FilteredBusinessUnit.name IN (@Branch ))) 作为分支

`

代码返回针对单个分支运行的查询结果。但是,会抛出错误消息“子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或将子查询用作表达式时,这是不允许的。” 当我选择了多个分支。我的猜测是当 select 语句的最后一个块运行时发生错误。

如何编写此查询以显示多个分支的结果

请帮帮我

【问题讨论】:

  • 这意味着您的一个子查询一次返回多个值。
  • 谢谢雅克·布朗克霍斯特。我明白这意味着什么。我需要有关如何编写此查询的建议,以便它返回过滤器中多个分支的结果。

标签: sql reporting-services


【解决方案1】:

通过单独选择@Branch 变量。 这是更新后的代码示例

 SELECT   MQ.Name AS BranchName,
      (SELECT COUNT(FilteredAppointment.activitytypecodename) AS Expr1
                  FROM  FilteredBusinessUnit 
                  INNER JOIN FilteredSystemUser ON FilteredBusinessUnit.businessunitid = FilteredSystemUser.businessunitid 
                  INNER JOINFilteredAppointment ON FilteredSystemUser.systemuserid = FilteredAppointment.createdby
                  WHERE (FilteredBusinessUnit.name = MQ.Name)) AS Appointment,
                  (SELECT COUNT(FilteredLead.leadid) AS Expr1
                       FROM  FilteredBusinessUnit AS FilteredBusinessUnit_7 
                       INNER JOIN FilteredSystemUser AS FilteredSystemUser_7 ON FilteredBusinessUnit_7.businessunitid = FilteredSystemUser_7.businessunitid 
                       INNER JOIN FilteredLead ON FilteredSystemUser_7.systemuserid = FilteredLead.createdby
                       WHERE  (FilteredBusinessUnit_7.name = MQ.Name) AND (FilteredLead.new_referraltypename = 'Bank Staff')) AS Bank_Staff_Referral,
                     (SELECT COUNT(FilteredLead_3.leadid) AS Expr1
                       FROM            FilteredBusinessUnit AS FilteredBusinessUnit_6 INNER JOIN
                                                 FilteredSystemUser AS FilteredSystemUser_6 ON FilteredBusinessUnit_6.businessunitid = FilteredSystemUser_6.businessunitid INNER JOIN
                                                 FilteredLead AS FilteredLead_3 ON FilteredSystemUser_6.systemuserid = FilteredLead_3.createdby
                       WHERE        (FilteredBusinessUnit_6.name = MQ.Name) AND (FilteredLead_3.new_referraltypename = 'Existing Customer')) AS Customer_Referral,
                     (SELECT        COUNT(Filterednew_discoveryinterview.activityid) AS Expr1
                       FROM            FilteredBusinessUnit AS FilteredBusinessUnit_5 INNER JOIN
                                                 FilteredSystemUser AS FilteredSystemUser_5 ON FilteredBusinessUnit_5.businessunitid = FilteredSystemUser_5.businessunitid INNER JOIN
                                                 Filterednew_discoveryinterview ON FilteredSystemUser_5.systemuserid = Filterednew_discoveryinterview.createdby
                       WHERE        (FilteredBusinessUnit_5.name = MQ.Name)) AS Discovery_Interview,
                     (SELECT        COUNT(FilteredLead_2.leadid) AS Expr1
                       FROM            FilteredBusinessUnit AS FilteredBusinessUnit_4 INNER JOIN
                                                 FilteredSystemUser AS FilteredSystemUser_4 ON FilteredBusinessUnit_4.businessunitid = FilteredSystemUser_4.businessunitid INNER JOIN
                                                 FilteredLead AS FilteredLead_2 ON FilteredSystemUser_4.systemuserid = FilteredLead_2.createdby
                       WHERE        (FilteredBusinessUnit_4.name = MQ.Name)) AS Generated_Leads
FROM FilteredBusinessUnit MQ--I Assume this is where the Branch Name  Is kept
WHERE MQ.Name In (@Branch) 

【讨论】:

  • 我尝试了您的解决方案,但是当我在过滤器中选择多个分支时,它会将所有选定分支的查询结果合并为一个,并在选定的第一个分支下显示所有结果。当我只选择拉各斯分行分支名称时的示例|预约 |线索 |电话拉各斯 | 50 |100 |189 但如果我选择拉各斯和阿布贾分行名称|预约|潜在客户|电话拉各斯 | 250 | 210 |第589章
  • @DavidEdokpayi 尝试选择分支名称而不是变量“@Branch”,您将不得不稍微修改查询以实现此目的。我将更新代码以反映我想说的内容
  • @DavidEdokpayi 已经更新了,请看修改后的Code
  • 我尝试了您发送的更新,但是当我选择多个过滤器时,它会抛出此错误“数据集“dataset1”的执行失败。 "," 附近有不正确的语法错误 ","....' 附近有不正确的语法错误。当我研究错误时,它表明结果字符串已合并,我需要一个函数来拆分结果字符串
  • @DavidEdokpayi 如果我不了解您的数据结构,则很难编译此查询。在 Sql Management Studio 中复制查询并执行它。这将为您提供更详细的错误描述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多