SQL Server:将单个列值逗号拆分为多个列
现在我刚接触SQL Server,尝试拆分一个用逗号分隔的列值,我希望每个数据都有一个单独的列SQL Server:将单个列值逗号拆分为多个列,sql,sql-server,Sql,Sql Server,现在我刚接触SQL Server,尝试拆分一个用逗号分隔的列值,我希望每个数据都有一个单独的列 2270,2290,2234,2245,2256 我希望结果是这样的: | Split column | 2270 2290 2234 有什么想法会被欣赏,因为我在这里的方式的深度?当我使用SQL Server 2017时,我有String\u split并将兼容性设置为140。但我得到的只是 2270,2290,2234 2270,2290,2234 2
2270,2290,2234,2245,2256
我希望结果是这样的:
| Split column |
2270
2290
2234
有什么想法会被欣赏,因为我在这里的方式的深度?当我使用SQL Server 2017时,我有String\u split
并将兼容性设置为140。但我得到的只是
2270,2290,2234
2270,2290,2234
2270,2290,2234
这是一个查询,其中的输出将与我在问题中发布的方式相同,需要拆分:
SELECT ERSBusinessLogic_InputDataSeries
FROM [AnimalProductsCoSD].[CoSD].[ERSBusinessLogic]
WHERE
ERSBusinessLogic_InputGeographyDimensionID = 7493
AND ERSBusinessLogic_InputTimeDimensionValue = 'all months'
AND ERSBusinessLogic_Type = 'HS10 aggregation';
您遇到了一个问题,因为
split\u string()
无法保持结果的顺序。啊!这已经是对Microsoft的功能请求
字符串的格式看起来非常规范。如果是这样,您只需使用substring()
:
如果顺序不重要,可以使用split\u string()
:
. . .
string\u split()
有效。如果SQL不起作用,请发布您尝试过的SQL。从[AnimalProductsCSSD].[CoSD].[ERSBusinessLogic]中选择ERSBusinessLogic\u InputDataSeries其中,ERSBusinessLogic_InputGeographyDimensionID=7493,ERSBusinessLogic_InputDimensionValue='all months'和ERSBusinessLogic_Type='HS10 aggregation',这是一个查询,其中输出将与我在问题中发布的方式相同,这个输出需要拆分,您实际运行的查询是什么,它生成了这3个重复的行?
SELECT LEFT(ERSBusinessLogic_InputDataSeries, 4) as str1,
SUBSTRING(ERSBusinessLogic_InputDataSeries, 5, 4) as str2,
RIGHT(ERSBusinessLogic_InputDataSeries, 4) as str3
FROM [AnimalProductsCoSD].[CoSD].[ERSBusinessLogic]
WHERE ERSBusinessLogic_InputGeographyDimensionID = 7493 AND
ERSBusinessLogic_InputTimeDimensionValue = 'all months' AND
ERSBusinessLogic_Type = 'HS10 aggregation';
SELECT ss.*
FROM [AnimalProductsCoSD].[CoSD].[ERSBusinessLogic] ebl OUTER APPLY
(SELECT MAX(CASE WHEN seqnum = 1 THEN val END) as str1,
MAX(CASE WHEN seqnum = 2 THEN val END) as str2
MAX(CASE WHEN seqnum = 3 THEN val END) as str3
FROM (SELECT ss.val, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) as seqnum
FROM split_string(ERSBusinessLogic_InputDataSeries, ',') ss(val)
) ss
) ss
WHERE ERSBusinessLogic_InputGeographyDimensionID = 7493 AND
ERSBusinessLogic_InputTimeDimensionValue = 'all months' AND
ERSBusinessLogic_Type = 'HS10 aggregation';