我需要帮助编写SQL Server查询

我需要帮助编写SQL Server查询,sql,sql-server,Sql,Sql Server,我的数据如下所示(通常超过2条记录) 当我使用以下SQL时,我只能求和为100。但我想要250英镑 SELECT SUM(NET_UNUSED) + SUM(BANK_ASSET) AS BANK_ASSET, OBLIGOR AS OBLIGOR, SUBSTRING (OBN_NUM,1,4) AS OBN_NUM FROM RB_CRM_DEV.[IN].STG_SF_I_DC WHERE SUBSTRING (OBN_NUM,1,4)

我的数据如下所示(通常超过2条记录)

当我使用以下SQL时,我只能求和为100。但我想要250英镑

SELECT  
    SUM(NET_UNUSED) + SUM(BANK_ASSET) AS BANK_ASSET,  
    OBLIGOR AS OBLIGOR, 
    SUBSTRING (OBN_NUM,1,4) AS OBN_NUM
FROM 
    RB_CRM_DEV.[IN].STG_SF_I_DC
WHERE 
    SUBSTRING (OBN_NUM,1,4) = SUBSTRING (OBN_NUM,1,4)
    AND SUBSTRING( XPTYPE,1,1) IN (0,1)
GROUP BY  
    OBLIGOR, SUBSTRING (OBN_NUM, 1, 4)
ORDER BY
    OBLIGOR, SUBSTRING(OBN_NUM, 1, 4)

我如何确保我的记录集应该至少有
xptype为0,1
的记录来检查此查询(因为(0,1)条件中的
SUBSTRING(xptype,1,1)会删除其他两条记录)。

好的,如果我正确理解了您的要求,然后,您要查找的是债务人是否存在任何以0或1开头的xptype记录,因此您可以使用
EXISTS
来检查:

SELECT  SUM(NET_UNUSED)+SUM(BANK_ASSET) AS BANK_ASSET,  OBLIGOR AS OBLIGOR, 
  SUBSTRING (OBN_NUM,1,4) AS OBN_NUM
FROM RB_CRM_DEV.[IN].STG_SF_I_DC A
WHERE EXISTS (
  SELECT 1 FROM RB_CRM_DEV.[IN].STG_SF_I_DC B
  WHERE SUBSTRING (A.OBN_NUM,1,4) = SUBSTRING (B.OBN_NUM,1,4)
    AND A.OBLIGOR = B.OBLIGOR
    AND SUBSTRING( B.XPTYPE,1,1) IN (0,1)
  )
GROUP BY  OBLIGOR, SUBSTRING (OBN_NUM,1,4)
ORDER by OBLIGOR,SUBSTRING(OBN_NUM,1,4)

应该有用。如果这不是您想要的,请使用更多示例数据编辑您的问题,以准确显示您想要的内容。

使用join的另一种方法-

SELECT Sum(t1.net_unused) + Sum(t1.bank_asset) AS BANK_ASSET, 
       t1.obligor                              AS OBLIGOR, 
       Substring (t1.obn_num, 1, 4)            AS OBN_NUM 
FROM   rb_crm_dev.[IN].stg_sf_i_dc t1 
       INNER JOIN (SELECT obligor, 
                          obn_num 
                   FROM   rb_crm_dev.[IN].stg_sf_i_dc 
                   WHERE  Substring(xptype, 1, 1) IN ( 0, 1 )) t2 
               ON t1.obligor = t2.obligor 
                  AND Substring (t1.obn_num, 1, 4) = 
                      Substring (t2.obn_num, 1, 4) 
GROUP  BY t1.obligor, 
          t1.Substring (obn_num, 1, 4) 
ORDER  BY t1.obligor, 
          t1.Substring(obn_num, 1, 4) 

我不确定我是否理解这个问题。您的
XPTYPE
有4个字符。你说它的xptype为0,1是什么意思?看起来您可能想检查第二个字符是0还是1?或者你的意思是xtype必须在其中的任何位置具有0或1中的一个?在多个记录中,至少有一个记录的xptype的第一个字符为0或1,以便对
债务人、子字符串(OBN_NUM,1,4)
的所有行求和,只要该组合的任何行以1或0开头?这是我的错。由于所有三条记录都属于我的聚合(因为substr(obn_num,1,4)是相同的,但我想检查只有记录的xptype的第一个字符是0或1。请停止解释您在注释中的意思,而改为回答问题,以便在哪里可以看到它更清楚。
SELECT Sum(t1.net_unused) + Sum(t1.bank_asset) AS BANK_ASSET, 
       t1.obligor                              AS OBLIGOR, 
       Substring (t1.obn_num, 1, 4)            AS OBN_NUM 
FROM   rb_crm_dev.[IN].stg_sf_i_dc t1 
       INNER JOIN (SELECT obligor, 
                          obn_num 
                   FROM   rb_crm_dev.[IN].stg_sf_i_dc 
                   WHERE  Substring(xptype, 1, 1) IN ( 0, 1 )) t2 
               ON t1.obligor = t2.obligor 
                  AND Substring (t1.obn_num, 1, 4) = 
                      Substring (t2.obn_num, 1, 4) 
GROUP  BY t1.obligor, 
          t1.Substring (obn_num, 1, 4) 
ORDER  BY t1.obligor, 
          t1.Substring(obn_num, 1, 4)