【发布时间】:2019-06-03 22:07:12
【问题描述】:
我有三张桌子
供应商
provider_id provider_name email
1 abc abc@gmail.com
2 xyz xyz@gmail.com
专业
speciality_id speciality_name
1 Derma
2 Ortho
provider_speciality
Provider_id speciality_id
1 1
1 2
我需要像下面这样的输入
Providername Speciality_name email
abc Derma,Ortho abc@gmail.com
下面是我的查询
select
a.provider_name,
STUFF((SELECT ', ' + ff.speciality_name
FROM speciality ff
WHERE ff.speciality_id = pe.speciality_id
FOR XML PATH('')), 1, 1, '')
speciality_name,
a.email
from providers a
left join providers_speciality pe on a.provider_id = pe.provider_id
and ISNULL(1,pe.speciality_id) = pe.speciality_id
left join speciality f with (nolock) on pe.speciality_id = f.speciality_id
where
upper(a.provider_name) like upper(ISNULL('%abc%',a.provider_name))
group by a.provider_name,a.email,pe.speciality_id
结果如下
Providername Speciality_name email
abc Derma abc@gmail.com
abc Ortho abc@gmail.com
可能是因为 pe.speciality_id 的 group by
但如果我从下面的group by 子句中删除它,就会出现错误
providers_speciality.speciality_id' 在选择列表中无效 因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句。
【问题讨论】:
标签: sql sql-server sql-server-2008 group-by string-aggregation