问题描述
我有以下数据库模型:
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 (将#修改为@)