Sql server 失败时,为什么我的查询在案例中?

Sql server 失败时,为什么我的查询在案例中?,sql-server,null,case,Sql Server,Null,Case,我正在尝试运行SQL Server案例查询,但遇到错误。让我试着解释我为什么要做我正在做的事情,以及我在最终结果中寻找的东西 我有两张桌子。1有一个opportunity ID在本例中是A.ID,第二个表中有一列我对B.Q3ABM_______C感兴趣的帐户。在本例中,我要求SQL做的是,对于B.Q3ABM______C列中的每一个A.ID为null,给我一个1,反之亦然。 为什么会失败 SELECT B.ID as Account_ID, B.FULL_ACCOUNT_ID__C, A.ID

我正在尝试运行SQL Server案例查询,但遇到错误。让我试着解释我为什么要做我正在做的事情,以及我在最终结果中寻找的东西

我有两张桌子。1有一个opportunity ID在本例中是A.ID,第二个表中有一列我对B.Q3ABM_______C感兴趣的帐户。在本例中,我要求SQL做的是,对于B.Q3ABM______C列中的每一个A.ID为null,给我一个1,反之亦然。 为什么会失败

SELECT B.ID as Account_ID, B.FULL_ACCOUNT_ID__C, A.ID as Opportunity_ID,A.name, stagename,closedate,A.createddate,
OPPORTUNITY_PRODUCT__C,AMOUNT, B.Q3ABM__C, B.Drip_Campaign_Code__c,OPPORTUNITYTYPE_STRING__C,
CASE 
    WHEN (SELECT A.id FROM SF_OPPORTUNITY as a 
LEFT JOIN SF_ACCOUNT as b on A.Accountid = b.ID where B.Q3ABM__C IS NULL) THEN 1
    ELSE 0
    END AS 'Does Not Exist in Q3DM',
CASE 
    WHEN (SELECT A.id FROM SF_OPPORTUNITY as a
 LEFT JOIN SF_ACCOUNT as b on A.Accountid = b.ID where B.Q3ABM__C IS NOT NULL) THEN 1
    ELSE 0
    END AS 'Exists in Q3DM'

FROM SF_OPPORTUNITY as a
LEFT JOIN SF_ACCOUNT as b on a.ACCOUNTID = b.ID 
WHERE A.createddate >= '7-1-2019'
AND CLOSEDATE <= '12-31-2019'

谢谢

如果要在特定时段内选择记录,但要检查所有记录是否为空,而不是为空,则可以检查哪个ID有空值。如果存在空值,则我们可以计算第一个值不存在于Q3DM列中,如果不存在,则第二个值存在于Q3DM中:

如果您只对给定期间的值感兴趣,并且只检查当前记录的值:

SELECT B.ID as Account_ID
      ,B.FULL_ACCOUNT_ID__C
      ,A.ID as Opportunity_ID
      ,A.name
      ,stagename
      ,closedate
      ,A.createddate
      ,OPPORTUNITY_PRODUCT__C
      ,AMOUNT
      ,B.Q3ABM__C
      ,B.Drip_Campaign_Code__c
      ,OPPORTUNITYTYPE_STRING__C
      ,CASE DS.Id IS NULL THEN  1 ELSE 0 END 'Does Not Exist in Q3DM'
      ,CASE DS.Id IS NOT NULL THEN 1 ELSE 0 END 'Exists in Q3DM' 
FROM SF_OPPORTUNITY as a
LEFT JOIN SF_ACCOUNT as b 
    on a.ACCOUNTID = b.ID
LEFT JOIN DataSource DS
    ON A.ACCOUNTID = DS.ID
WHERE A.createddate >= '7-1-2019'
    AND CLOSEDATE <= '12-31-2019'

根据您的要求,尝试在“选择”和“位置”条款中使用此列:

SELECT A.*,B.* , 
CASE WHEN B.Q3ABM__C IS NULL THEN 1 ELSE 0 END AS 'DOES NOT EXISIT IN Q3DM',
CASE WHEN B.Q3ABM__C IS NOT NULL THEN 1 ELSE 0 END AS 'EXISITS IN Q3DM'
FROM PLS.SF_OPPORTUNITY A
FULL JOIN PLS.SF_ACCOUNT B ON A.ACCOUNTID=B.ID
SELECT A.*,B.* , 
CASE WHEN B.Q3ABM__C IS NULL THEN 1 ELSE 0 END AS 'DOES NOT EXISIT IN Q3DM',
CASE WHEN B.Q3ABM__C IS NOT NULL THEN 1 ELSE 0 END AS 'EXISITS IN Q3DM'
FROM PLS.SF_OPPORTUNITY A
FULL JOIN PLS.SF_ACCOUNT B ON A.ACCOUNTID=B.ID