【问题标题】:Subquery returned more than 1 value not permitted when subquery follows =,!=,<,<=,>,>= or when subquery used as an expression当子查询跟随 =,!=,<,<=,>,>= 或当子查询用作表达式时,子查询返回的值不允许超过 1 个
【发布时间】:2017-08-21 12:12:29
【问题描述】:

当我在 sql server 视图中选择行时出现标题错误。

这是我的代码

CREATE VIEW vw_cashbook AS
SELECT cashbooktranno, 
       cashbookdate, 
       cashbookrefaccname, 
       cashbookgroupname, 
       cashbookaccname, 
       cashbookdescription, 
       cashbookreceipt, 
       cashbookpayment,
       (select sum(cashbook.cashbookreceipt) - sum(cashbook.cashbookpayment) from tbl_cashbook) as totalpayment,
       company.companyname
FROM tbl_cashbook cashbook 
  LEFT OUTER JOIN tbl_companyregistration company 
               ON cashbook.branchid = company.companyid
group by cashbooktranno, cashbookdate, cashbookrefaccname, cashbookgroupname, cashbookaccname, 
cashbookdescription, cashbookreceipt, cashbookpayment, company.companyname

现在,此代码用于从表中创建视图。 这段代码非常完美,因此根据我的视图也创建的代码。 现在,问题是当我从创建的视图中选择行或编辑视图时,它会显示错误

子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。

这是我对视图的选择查询

SELECT TOP 1000 [cashbooktranno]
      ,[cashbookdate]
      ,[cashbookrefaccname]
      ,[cashbookgroupname]
      ,[cashbookaccname]
      ,[cashbookdescription]
      ,[cashbookreceipt]
      ,[cashbookpayment]
      ,[totalpayment]
      ,[companyname]
  FROM [AutoFinanceSoftware].[dbo].[vw_cashbook]

那么我的查询有什么问题还是有其他问题。

【问题讨论】:

  • 您能告诉我们您用来从该视图中选择的查询吗?
  • 您在创建视图时是否收到该错误?
  • @MartinBrown 我已经更新了我的问题中的选择查询,请查看它。
  • @LasseV.Karlsen 没有。创建视图时我没有收到任何错误。
  • 如果只执行视图创建的 SELECT 部分会发生什么,它也会失败吗?

标签: sql-server tsql


【解决方案1】:

不需要子查询。使用:

CREATE VIEW vw_cashbook AS
SELECT cashbooktranno, 
       cashbookdate, 
       cashbookrefaccname, 
       cashbookgroupname, 
       cashbookaccname, 
       cashbookdescription, 
       cashbookreceipt, 
       cashbookpayment,
       sum(cashbook.cashbookreceipt) - sum(cashbook.cashbookpayment) as totalpayment,
       company.companyname
FROM tbl_cashbook cashbook 
  LEFT OUTER JOIN tbl_companyregistration company 
               ON cashbook.branchid = company.companyid
group by cashbooktranno, cashbookdate, cashbookrefaccname, cashbookgroupname, cashbookaccname, 
cashbookdescription, cashbookreceipt, cashbookpayment, company.companyname;

甚至(如果两列都是NOT NULL):

CREATE VIEW vw_cashbook AS
SELECT cashbooktranno, 
       cashbookdate, 
       cashbookrefaccname, 
       cashbookgroupname, 
       cashbookaccname, 
       cashbookdescription, 
       cashbookreceipt, 
       cashbookpayment,
       sum(cashbook.cashbookreceipt - cashbook.cashbookpayment) as totalpayment,
       company.companyname
FROM tbl_cashbook cashbook 
  LEFT OUTER JOIN tbl_companyregistration company 
               ON cashbook.branchid = company.companyid
group by cashbooktranno, cashbookdate, cashbookrefaccname, cashbookgroupname, cashbookaccname, 
cashbookdescription, cashbookreceipt, cashbookpayment, company.companyname

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    相关资源
    最近更新 更多