【问题标题】:SQL IN statement not checking properly?SQL IN 语句没有正确检查?
【发布时间】:2016-03-07 16:17:11
【问题描述】:

我正在处理表中的列/字段,该表具有多个与之关联的“代码”或“ID”。

afacctbal 表有一个名为 afacbbalid 的列/字段,其中可能的值可以是 COST、PRN 或 COLL。

我遇到的问题是在帐户中提取 COST 等于 0 的行。

我在 where 子句中尝试了子查询 SQL 语句,但返回一般错误。现在我正在尝试一个 IN 语句,但这似乎也不起作用。

这是我得到的:

select araccount.aracid as AccountID, arentity.arenst State, arentity.ARENNAME ClientName,
 afaccount.afaccurbal CurrentBal, afacctbal.afacbcurbal PrincipalBal,
  afacctbal.AFACBbalid
from araccount
 inner join arrelationship on araccount.aracid = arrelationship.arrelacid
 inner join arentity on arentity.arenid = arrelationship.ARRELENID
 inner join afaccount on afaccount.afacacctid = araccount.ARACID
 inner join afacctbal on afaccount.AFACKEY = afacctbal.AFACBACCTID
where afacctbal.afacbbalid in("COST",0)
    and afaccount.AFACRATEID = "MN100"
    and arentity.ARENST = "MN"
    and araccount.araclstdte > "2013-04-01"
order by afaccount.afaccurbal

问题在于我的 where 子句 这里:

where afacctbal.afacbbalid in("COST",0)

如何检查 COST 并检查其是否等于 0?

财务报表 使用值: afacbbalid -- 余额 ID afacbcurbal -- 每个余额 id 的余额。 账户表 使用值: afaccurbal -- 当前余额

【问题讨论】:

  • 请提供您的表结构、示例数据和期望的结果。
  • 这些表有数百个字段,有什么方法可以大致了解前进的方向吗?
  • 字段 afacbbalid 有 COST PRN COLL 的可能性,每个在帐户中都有一个与之关联的值,我只需要能够提取该值。所以像 afacbbalid.COST = ??并显示它
  • 您不需要提供整个表格——只需提供相关部分即可。你说 afacbbalid 是 3 个值之一——那它怎么可能是 0 呢?提供样本数据和预期结果会更容易。
  • 示例数据类似于 Owen Smith,当前余额 500.0 美元,本金余额 250,afacbbalid COST。那将是一排,其中 250 是成本。下一行就像 Owen Smith,当前余额 500 美元,本金余额 200。 afacbbalid INT,依此类推,所有 afacbbalid 加起来就是当前余额。

标签: sql odbc razorsql


【解决方案1】:

您使用的是"COST",它是字符串,然后是0,它是一个整数。因此,您需要将两者都转换为 afacctbal.afacbbalid 列所具有的数据类型。

【讨论】:

    【解决方案2】:

    我认为以下查询将满足您的要求 -

    select araccount.aracid as AccountID, arentity.arenst State, arentity.ARENNAME ClientName,
     afaccount.afaccurbal CurrentBal, afacctbal.afacbcurbal PrincipalBal,
      afacctbal.AFACBbalid
    from araccount
     inner join arrelationship on araccount.aracid = arrelationship.arrelacid
     inner join arentity on arentity.arenid = arrelationship.ARRELENID
     inner join afaccount on afaccount.afacacctid = araccount.ARACID
     inner join afacctbal on afaccount.AFACKEY = afacctbal.AFACBACCTID
    where ((afacctbal.afacbbalid ='COST'
        and afaccurbal.currentBal = 0) or 
         (afacctbal.afacbbalid ='PRN'
        and afaccurbal.currentBal > 0))
        and afaccount.AFACRATEID = "MN100"
        and arentity.ARENST = "MN"
        and araccount.araclstdte > "2013-04-01"
    order by afaccount.afaccurbal
    

    【讨论】:

    • 是的,这就是我目前所拥有的,但现在我需要在 afacbbalid 下显示在 PRN 中仍有值的帐户。我的困境是我不确定如何同时检查 PRN 和 COST,因为它们是同一个字段。
    • 我不确定您需要什么,但可以添加更多标准 - where afacctbal.afacbbalid ='COST' or afacctbal.afacbbalid ='PRN'
    • 这样做会检查它们是否都是 0,我需要一种方法来显示 COST 为 0 且 PRN 大于 0 的结果
    • 条件可以是where (afacctbal.afacbbalid ='COST' and afaccurbal.currentBal = 0) or (afacctbal.afacbbalid ='PRN' and afaccurbal.currentBal >0)
    • 如果这解决了。您介意接受最新的编辑作为答案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多