我需要帮助编写SQL Server查询
我的数据如下所示(通常超过2条记录) 当我使用以下SQL时,我只能求和为100。但我想要250英镑我需要帮助编写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)
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)