使用 SQL Server 中不同表的数据创建逗号分隔值字符串

问题描述

我有以下数据库模型:

criteria table:
criteria_id   criteria_name      is_range
  1         product_category        0
  2         product_subcategory     0
  3             items               1
  4            criteria_4           1


evaluation_grid table:
evaluation_grid_id  criteria_id start_value  end_value  provider    property_1    property_2 property_3      
    1                       1       3           NULL    internal        1             1             1
    2                       1       1           NULL    internal        1             1             1
    3                       2       1           NULL    internal        1             2             1
    4                       3       1           100     internal        2             1             1
    5                       4       1           50      internal        2             2             1
    6                       1       2           NULL    external        2             8             1
    7                       2       2           NULL    external        2             5             1
    8                       3       1           150     external        2             2             2
    9                       3       1           100     external        2             3             1

 product_category table:
   id    name
   1     test1 
   2     test2
   3     test3

 product_subcategory table:
   id    name
   1     producttest1
   2     producttest2
   3     producttest3

我想要实现的是返回这样的值:

 criteria             start_value    end_value  provider   property_1   property_2  property_3
 product_category     test3,test1     NULL     internal        1           1           1
 product_subcategory  producttest1     NULL     internal        1           2           1
 items                     1           100      internal        2           1           1
 criteria_4                1           50       internal        2           2           1
 product_category         test2       NULL      external        2           8           1
 product_subcategory  producttest2    NULL      external        2           5           1
 items                     1           150      external        2           2           2
 criteria_4                1           100      external        2           3           1

基本上保持表evaluation_grid的顺序,但只对不是范围的标准进行分组 在基于 start_value、end_value、provier、property_1、property_2 和 property_3 的逗号分隔值字符串中

我是这样试的:

 SELECT c.criteria_name AS criteria,CASE WHEN c.criteria_id = 1
    THEN 
       (IsNull(STUFF((SELECT ',' + RTRIM(LTRIM(pc.name))
        FROM product_category pc 
        INNER JOIN [evaluation_grid] eg ON eg.start_value=pc.id
        WHERE srsg.criteria_id=c.criteria_id
        FOR XML PATH('')),1,2,''),'')) 
    WHEN c.criteria_id = 2
        THEN (IsNull(STUFF((SELECT ',' + RTRIM(LTRIM(psc.name))
            FROM product_subcategory psc 
            INNER JOIN [evaluation_grid] eg ON eg.start_value=psc.id
            WHERE srsg.criteria_id=c.criteria_id
            FOR XML PATH('')
            ),3,'')) 
    ELSE 
        CAST(eg.start_value AS VARCHAR)
    END AS start_value,eg.end_value AS end_value,eg.provider AS provider,eg.property_1 AS property_1,eg.property_2 AS property_2,eg.property_3 AS property_3
FROM [evaluation_grid] eg
INNER JOIN criteria c ON eg.criteria_id = crs.criteria_id
GROUP BY c.criteria_name,c.criteria_id,c.is_range,eg.start_value,eg.end_value,eg.provider,eg.property_1,eg.property_2,eg.property_3

但是它返回了错误的数据,如下所示:

criteria                    start_value      end_value      provider   property_1   property_2  property_3
product_category     test3,test1,test2        NULL        internal        1           1           1
product_category     test3,test2        NULL        external        2           8           1
product_category     test3,test2        NULL        internal        1           1           1
product_subcategory  producttest1,producttest2  NULL        internal        1           2           1
product_subcategory  producttest1,producttest2  NULL        external        2           5           1
items                        1                  100         internal        1           1           1
items                        1                  150         external        2           2           2
criteria_4                   1                  50          internal        2           2           1
criteria_4                   1                  100         external        2           3           1

我尝试了一些带有“with cte;”的版本同样,但还没有设法找到解决方案,是的,我已经检查了类似的问题。 :) PS:我不能使用 STRING_AGG,因为我们的 Sql Server 版本低于 2017。 任何建议将不胜感激,谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)