【问题标题】:sql result column accumulated with commas用逗号累加的sql结果列
【发布时间】: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


    【解决方案1】:

    您可以像这样消除 GROUP BY:

    SELECT providers.*, STUFF((
        SELECT ',' + speciality_name
        FROM provider_speciality
        JOIN speciality ON provider_speciality.speciality_id = speciality.speciality_id
        WHERE provider_speciality.provider_id = providers.provider_id
        FOR XML PATH('')
    ), 1, 1, '') AS speciality_names
    FROM providers
    

    Demo on db<>fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多