Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询获取瑞士境内计数至少为1的名称_Sql_Sql Server 2008 - Fatal编程技术网

Sql 查询获取瑞士境内计数至少为1的名称

Sql 查询获取瑞士境内计数至少为1的名称,sql,sql-server-2008,Sql,Sql Server 2008,有没有办法解决这个问题 在下面的查询中,我想将所有在瑞士计数至少为1的姓名的结果输入到组合中 我已经尝试按照下面的步骤创建临时表,我认为它是可行的,但必须有一个最简单的方法来解决: SELECT c.name, COUNT(CASE WHEN country = 'Germany' THEN 1 END) as 'Germany', COUNT(CASE WHEN country = 'London' THEN 1 END) as 'London', COUNT(CASE WHEN

有没有办法解决这个问题

在下面的查询中,我想将所有在瑞士计数至少为1的姓名的结果输入到组合中

我已经尝试按照下面的步骤创建临时表,我认为它是可行的,但必须有一个最简单的方法来解决:

SELECT c.name, 
COUNT(CASE WHEN country = 'Germany' THEN 1 END) as 'Germany', 
COUNT(CASE WHEN country = 'London' THEN 1 END) as 'London',     
COUNT(CASE WHEN country = 'Switzerland' THEN 1 END) as 'Switzerland',   
COUNT(CASE WHEN country NOT IN('London', 'Ireland') THEN 1 END) as 'others' 
FROM a_products p 
JOIN a_customers c 
on id_customer = c.id 
Group By name
潜在解决方案:

select *
into #Swiss
from a_products
where country = 'Switzerland' 

SELECT c.name, 
COUNT(CASE WHEN country = 'Germany' THEN 1 END) as 'Germany', 
COUNT(CASE WHEN country = 'London' THEN 1 END) as 'London',     
COUNT(CASE WHEN country = 'Switzerland' THEN 1 END) as 'Switzerland',   
COUNT(CASE WHEN country NOT IN('London', 'Ireland') THEN 1 END) as 'others' 
FROM a_products p 
JOIN a_customers c 
on p.id_customer = c.id 
JOIN #Swiss s
on p.id_customer = s.id_customer
where s.id_customer is not null
Group By name

count用于非空值,并且当country=“…”始终为!=在这种情况下,从null开始,您可以尝试使用SUM,并将选中值管理为1,而将未选中值管理为0

SELECT c.name, 
SUM(CASE WHEN country = 'Germany' THEN 1 ELSE 0 END ) as Germany, 
SUM(CASE WHEN country = 'London' THEN 1 ELSE 0 END ) as London,     
SUM(CASE WHEN country = 'Switzerland' THEN 1 ELSE 0 END ) as Switzerland,   
SUM(CASE WHEN country NOT IN('London', 'Ireland') THEN 1 ELSE 0 END ) as others
FROM a_products p 
JOIN a_customers c 
on id_customer = c.id 
Group By name
对于flilter来说,瑞士的价值可以用

SELECT c.name, 
SUM(CASE WHEN country = 'Germany' THEN 1 ELSE 0 END ) as Germany, 
SUM(CASE WHEN country = 'London' THEN 1 ELSE 0 END ) as London,     
SUM(CASE WHEN country = 'Switzerland' THEN 1 ELSE 0 END ) as Switzerland,   
SUM(CASE WHEN country NOT IN('London', 'Ireland') THEN 1 ELSE 0 END ) as others
FROM a_products p 
JOIN a_customers c 
on id_customer = c.id 
Group By name
HAVING SUM(CASE WHEN country = 'Switzerland' THEN 1 ELSE 0 END ) >=1 
或者干脆

SELECT c.name,  
SUM(CASE WHEN country = 'Switzerland' THEN 1 ELSE 0 END ) as Switzerland 
FROM a_products p 
JOIN a_customers c 
on id_customer = c.id 
Group By name
HAVING SUM(CASE WHEN country = 'Switzerland' THEN 1 ELSE 0 END ) >=1 

请提供样本输入和输出。这将很容易检查。:-)非常感谢你@Alexansanchez如果我的答案是正确的,请(过去15分钟)将其标记为已接受…看看这里我是如何将SUM替换为have SUM(当country='switzer'然后1 ELSE 0 END)>1(当country='switzer'然后1 ELSE 0 END)>=1,这正好是我所需要的:)@Alexansanchez..正确答案更新为>=