导致Firebird 2.5查询失败的联盟

时间:2017-09-27 18:43:29

标签: sql delphi union delphi-7 firebird

当我在Database Workbench中运行它时,这个SQL(Firebird 2.5,方言1)查询工作正常,但是当我在IBO控制台下运行它时它失败了:

  

列列表和变量列表的计数不匹配。

如果我在IBO控制台下单独运行这两个查询,那么这两个查询会成功运行,所以我推断问题是因为" Union。"列的数量和类型匹配两个查询 - 返回字符串,smallint,字符串(IBO控制台将此视为备忘录),字符串 - 因此Union应该有效(并且DB Workbench会发现它)。考虑到数据的长度可能不同,我尝试将第三列作为VarChar(500)进行投射,但这并没有帮助。寻找关于为什么这不起作用的想法,因为我们的应用程序正在执行查询的部分显然是以与IBO控制台相同的方式窒息。

Select QBI.TXNID as ID,
  Cast (1 as SmallInt) as TransactionType,
  ("Invoice " || QBI.REFNUMBER || ": $" || round(QBI.SUBTOTAL, 2) || " on " || QBI.TXNDATE || " for " || QBI.CUSTOMERREF_FULLNAME) as description,
  case
    when (QBI.CLASSREF_LISTID = "") then "Invoice has no class in Quickbooks"
    else "Invoice class doesn't match any dept on job " || JA.JOBID
  end as Problem
from QBINVOICE QBI
Join JOBACCOUNTINGID JA
  on QBI.CUSTOMERREF_LISTID = JA.jobaccountingid
  and QBI.SOURCEID = JA.SOURCEID
left Join CHARTOFACCOUNTS CA
  on (CA.qblistid = QBI.CLASSREF_LISTID and CA.qbsourceID = QBI.SOURCEID)
  and CA.CHARTACCOUNTTYPE = "SYSTEM"
  and CA.CHARTFETCH = "Y"
left Join DEPARTMENTJOB DJ
  on JA.JOBID = DJ.JobID
  and DJ.departmentID = CA.DEPARTMENTID
where DJ.DEPARTMENTID is null
  and QBI.TXNDATE >= "02/01/2017"

union all

select 
  QBELD.TXNLINEID as ID, 
  Cast (2 as SmallInt) as TransactionType,       
  QBB.VENDORREF_FULLNAME || " bill on " || QBB.TXNDATE || ": $" || round(QBELD.AMOUNT, 2) || " " || QBELD.ACCOUNTREF_FULLNAME || " expense" as description,
  case   
    when (QBELD.CLASSREF_LISTID = "") then "Expense has no class in Quickbooks"     
    else "Expense class doesn't match any dept on job " || JA.JOBID   
  end as Problem 
from QBTxnExpenseLineDetail QBELD 
JOIN QBBILL QBB
  on QBELD.TXNLINEID = QBB.TXNID 
  and QBELD.SOURCEID = QBB.SOURCEID 
Join JOBACCOUNTINGID JA 
  on QBELD.CUSTOMERREF_LISTID = JA.jobaccountingid 
  and QBELD.SOURCEID = JA.SOURCEID 
left Join CHARTOFACCOUNTS CA 
  on (CA.qblistid = QBELD.CLASSREF_LISTID and CA.qbsourceID = QBELD.SOURCEID) 
  and CA.CHARTACCOUNTTYPE = "SYSTEM" 
  and CA.CHARTFETCH = "Y" 
left Join DEPARTMENTJOB DJ 
  on JA.JOBID = DJ.JobID 
  and DJ.departmentID = CA.DEPARTMENTID 
where DJ.DEPARTMENTID is null   
  and QBB.TXNDATE >= "02/01/2017"

0 个答案:

没有答案