如何在一个sql查询语句中获取彼此无关的两列数据?

如何在一个sql查询语句中获取彼此无关的两列数据?,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我需要得到一个州级的服务数量计数。为此,我只有两项服务。第一列是状态,第二列是第一个服务,第三列是第二个服务。我所要做的是在一个查询中让结果显示第二列和第三列。这是我的密码: SELECT Distinct allstates.Name, count (data.StateName) as CareCase_Management_Services, count(data.StateName) Caregiver_Support_Services From (select distinct N

我需要得到一个州级的服务数量计数。为此,我只有两项服务。第一列是状态,第二列是第一个服务,第三列是第二个服务。我所要做的是在一个查询中让结果显示第二列和第三列。这是我的密码:

SELECT Distinct allstates.Name, count (data.StateName) as  CareCase_Management_Services, count(data.StateName) Caregiver_Support_Services
From
 (select distinct Name from USstate) allstates
 Left Join
 Client2017 data
 on
 allstates.Name = data.StateName and
 data.FiscalYear = 2017 and 
 data.SrvstartCareCaseMgmtCode NOT IN('999','', '998') and 
 data.SrvstartCaregiverSuppCode NOT IN('999','', '998')
 GROUP BY allstates.Name
 ORDER BY allstates.Name ASC  

我知道您希望为每个州计算符合特定标准的服务数量。有两种类型的服务,存储在两个不同的列中

如果是这样,可以使用条件聚合简化查询:

使用这种技术,每个服务都根据其自身的逻辑进行计数;当满足条件时,记录将被计数为1,并将其添加到总和中,否则将忽略+0


注意:在美国各州,你真的有重复的州名吗?如果否,您可以将子查询SELECT DISTINCT Name FROM USstate s替换为just USstate

请提供示例数据和结果在加入AllState之前是否尝试按StateName对Client2017进行分组?Client2017是一个包含我想要的数据的表,AllState是另一个包含所有StateName的表。所以我不确定我是否理解你的问题@如果你能告诉我们结果应该是什么样子,AdánBucioit会更有意义。这很有效。谢谢@GMB,我以前也不得不删除所有州。Name@Rika我不能提供样品或结果,这是高度机密的数据
SELECT
    allstates.Name,
    SUM(CASE WHEN c.SrvstartCareCaseMgmtCode  NOT IN ('999', '', '998') THEN 1 ELSE 0 END) CareCase_Management_Services,
    SUM(CASE WHEN c.SrvstartCaregiverSuppCode NOT IN ('999', '', '998') THEN 1 ELSE 0 END) Caregiver_Support_Services
FROM 
    (SELECT DISTINCT Name FROM USstate) s
    LEFT JOIN Client2017 c ON s.Name = c.StateName AND c.FiscalYear = 2017
GROUP BY allstates.Name