我需要帮助。有关CHARINDEX,PATINDEX,SUBSTRING,LEFT和RIGHT的SQL的问题。
我有一些字符串需要根据位置和定界符进行拆分。将其中一些用作列名,将另一部分用作数据。并根据行ID对其进行分组。然后根据需要对值求和。
样本数据,ID,字符串
1 20:4:10:1:20:3:
2 20:1:
3 10:3:
4 30:4:40:1:50:3:
所需的结果是
id 10 20 30 40 50
1 1 7
2 1
3 3
4 4 1 3
数据:
CREATE TABLE #Split (ID int, SplitString varchar(450))
Insert into #Split (ID, SplitString) values
(1, '20:4:10:1:20:3:'),
(2, '20:1:'),
(3, '10:3:'),
(4, '30:4:40:1:50:3:')
select * From #Split
DROP TABLE #Split
任何帮助将不胜感激!
数据也可能是这样:
CREATE TABLE #Split (ID int, String1 varchar(10), String1Quantity int, String2 varchar(10), String2Quantity int, String3 VARCHAR(10), String3Quantity int, String4 varchar(10), String4Quantity int, String5 varchar(10), String5Quantity int)
Insert into #Split (ID, String1, String1Quantity, String2, String2Quantity, String3, String3Quantity, String4, String4Quantity, String5, String5Quantity) values
(1,'20',4,'10',1,'20',3, null, null, null, null),
(2,'20',1,null,null,null,null, null, null, null, null),
(3,'10',3,null,null,null,null, null, null, null, null),
(4,'30',4,'40',1,'50',3, null, null, null, null)
select * From #Split
DROP TABLE #Split
我发现了对后一种数据不太好的解决方案,是否有更好的方法来做到这一点?
CREATE TABLE #Split (ID int, String1 varchar(10), String1Quantity int, String2 varchar(10), String2Quantity int, String3 VARCHAR(10), String3Quantity int, String4 varchar(10), String4Quantity int, String5 varchar(10), String5Quantity int)
Insert into #Split (ID, String1, String1Quantity, String2, String2Quantity, String3, String3Quantity, String4, String4Quantity, String5, String5Quantity) values
(1,'20',4,'10',1,'20',3, '20', 10, '20', 3),
(2,'20',1,'10',3,null,null, null, null, null, null),
(3,'10',3,'10',3,null,null, null, null, null, null),
(4,'30',4,'40',1,'50',3, '40', 8, '10', 1)
select
ID,
CASE
WHEN String1 = '10' and String2 = '10' and String3 = '10' and String4 = '10' and String5 = '10' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String4Quantity+String5Quantity)
WHEN String1 = '10' and String2 = '10' and String3 = '10' and String4 = '10' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String4Quantity)
WHEN String1 = '10' and String2 = '10' and String3 = '10' and String5 = '10' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String5Quantity)
WHEN String1 = '10' and String3 = '10' and String4 = '10' and String5 = '10' THEN SUM(String1Quantity+String3Quantity+String3Quantity+String4Quantity)
WHEN String2 = '10' and String3 = '10' and String4 = '10' and String5 = '10' THEN SUM(String2Quantity+String3Quantity+String4Quantity+String5Quantity)
WHEN String1 = '10' and String2 = '10' and String3 = '10' THEN SUM(String1Quantity+String2Quantity+String3Quantity)
WHEN String1 = '10' and String2 = '10' and String4 = '10' THEN SUM(String1Quantity+String2Quantity+String4Quantity)
WHEN String1 = '10' and String2 = '10' and String5 = '10' THEN SUM(String1Quantity+String2Quantity+String5Quantity)
WHEN String1 = '10' and String3 = '10' and String4 = '10' THEN SUM(String1Quantity+String3Quantity+String4Quantity)
WHEN String1 = '10' and String3 = '10' and String5 = '10' THEN SUM(String1Quantity+String3Quantity+String5Quantity)
WHEN String1 = '10' and String4 = '10' and String5 = '10' THEN SUM(String1Quantity+String4Quantity+String5Quantity)
WHEN String2 = '10' and String3 = '10' and String4 = '10' THEN SUM(String2Quantity+String3Quantity+String4Quantity)
WHEN String2 = '10' and String3 = '10' and String5 = '10' THEN SUM(String2Quantity+String3Quantity+String5Quantity)
WHEN String2 = '10' and String4 = '10' and String5 = '10' THEN SUM(String2Quantity+String4Quantity+String5Quantity)
WHEN String3 = '10' and String4 = '10' and String5 = '10' THEN SUM(String3Quantity+String4Quantity+String5Quantity)
WHEN String3 = '10' and String5 = '10' THEN SUM(String3Quantity+String5Quantity)
WHEN String3 = '10' and String4 = '10' THEN SUM(String3Quantity+String4Quantity)
WHEN String2 = '10' and String5 = '10' THEN SUM(String2Quantity+String5Quantity)
WHEN String2 = '10' and String4 = '10' THEN SUM(String2Quantity+String4Quantity)
WHEN String2 = '10' and String3 = '10' THEN SUM(String2Quantity+String3Quantity)
WHEN String1 = '10' and String5 = '10' THEN SUM(String1Quantity+String5Quantity)
WHEN String1 = '10' and String4 = '10' THEN SUM(String1Quantity+String4Quantity)
WHEN String1 = '10' and String3 = '10' THEN SUM(String1Quantity+String3Quantity)
WHEN String1 = '10' and String2 = '10' THEN SUM(String1Quantity+String2Quantity)
WHEN String5 = '10' THEN SUM(String5Quantity)
WHEN String4 = '10' THEN SUM(String4Quantity)
WHEN String3 = '10' THEN SUM(String3Quantity)
WHEN String2 = '10' THEN SUM(String2Quantity)
WHEN String1 = '10' THEN SUM(String1Quantity)
END AS '10',
CASE
WHEN String1 = '20' and String2 = '20' and String3 = '20' and String4 = '20' and String5 = '20' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String4Quantity+String5Quantity)
WHEN String1 = '20' and String2 = '20' and String3 = '20' and String4 = '20' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String4Quantity)
WHEN String1 = '20' and String2 = '20' and String3 = '20' and String5 = '20' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String5Quantity)
WHEN String1 = '20' and String3 = '20' and String4 = '20' and String5 = '20' THEN SUM(String1Quantity+String3Quantity+String3Quantity+String4Quantity)
WHEN String2 = '20' and String3 = '20' and String4 = '20' and String5 = '20' THEN SUM(String2Quantity+String3Quantity+String4Quantity+String5Quantity)
WHEN String1 = '20' and String2 = '20' and String3 = '20' THEN SUM(String1Quantity+String2Quantity+String3Quantity)
WHEN String1 = '20' and String2 = '20' and String4 = '20' THEN SUM(String1Quantity+String2Quantity+String4Quantity)
WHEN String1 = '20' and String2 = '20' and String5 = '20' THEN SUM(String1Quantity+String2Quantity+String5Quantity)
WHEN String1 = '20' and String3 = '20' and String4 = '20' THEN SUM(String1Quantity+String3Quantity+String4Quantity)
WHEN String1 = '20' and String3 = '20' and String5 = '20' THEN SUM(String1Quantity+String3Quantity+String5Quantity)
WHEN String1 = '20' and String4 = '20' and String5 = '20' THEN SUM(String1Quantity+String4Quantity+String5Quantity)
WHEN String2 = '20' and String3 = '20' and String4 = '20' THEN SUM(String2Quantity+String3Quantity+String4Quantity)
WHEN String2 = '20' and String3 = '20' and String5 = '20' THEN SUM(String2Quantity+String3Quantity+String5Quantity)
WHEN String2 = '20' and String4 = '20' and String5 = '20' THEN SUM(String2Quantity+String4Quantity+String5Quantity)
WHEN String3 = '20' and String4 = '20' and String5 = '20' THEN SUM(String3Quantity+String4Quantity+String5Quantity)
WHEN String3 = '20' and String5 = '20' THEN SUM(String3Quantity+String5Quantity)
WHEN String3 = '20' and String4 = '20' THEN SUM(String3Quantity+String4Quantity)
WHEN String2 = '20' and String5 = '20' THEN SUM(String2Quantity+String5Quantity)
WHEN String2 = '20' and String4 = '20' THEN SUM(String2Quantity+String4Quantity)
WHEN String2 = '20' and String3 = '20' THEN SUM(String2Quantity+String3Quantity)
WHEN String1 = '20' and String5 = '20' THEN SUM(String1Quantity+String5Quantity)
WHEN String1 = '20' and String4 = '20' THEN SUM(String1Quantity+String4Quantity)
WHEN String1 = '20' and String3 = '20' THEN SUM(String1Quantity+String3Quantity)
WHEN String1 = '20' and String2 = '20' THEN SUM(String1Quantity+String2Quantity)
WHEN String5 = '20' THEN SUM(String5Quantity)
WHEN String4 = '20' THEN SUM(String4Quantity)
WHEN String3 = '20' THEN SUM(String3Quantity)
WHEN String2 = '20' THEN SUM(String2Quantity)
WHEN String1 = '20' THEN SUM(String1Quantity)
END AS '20',
CASE
WHEN String1 = '30' and String2 = '30' and String3 = '30' and String4 = '30' and String5 = '30' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String4Quantity+String5Quantity)
WHEN String1 = '30' and String2 = '30' and String3 = '30' and String4 = '30' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String4Quantity)
WHEN String1 = '30' and String2 = '30' and String3 = '30' and String5 = '30' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String5Quantity)
WHEN String1 = '30' and String3 = '30' and String4 = '30' and String5 = '30' THEN SUM(String1Quantity+String3Quantity+String3Quantity+String4Quantity)
WHEN String2 = '30' and String3 = '30' and String4 = '30' and String5 = '30' THEN SUM(String2Quantity+String3Quantity+String4Quantity+String5Quantity)
WHEN String1 = '30' and String2 = '30' and String3 = '30' THEN SUM(String1Quantity+String2Quantity+String3Quantity)
WHEN String1 = '30' and String2 = '30' and String4 = '30' THEN SUM(String1Quantity+String2Quantity+String4Quantity)
WHEN String1 = '30' and String2 = '30' and String5 = '30' THEN SUM(String1Quantity+String2Quantity+String5Quantity)
WHEN String1 = '30' and String3 = '30' and String4 = '30' THEN SUM(String1Quantity+String3Quantity+String4Quantity)
WHEN String1 = '30' and String3 = '30' and String5 = '30' THEN SUM(String1Quantity+String3Quantity+String5Quantity)
WHEN String1 = '30' and String4 = '30' and String5 = '30' THEN SUM(String1Quantity+String4Quantity+String5Quantity)
WHEN String2 = '30' and String3 = '30' and String4 = '30' THEN SUM(String2Quantity+String3Quantity+String4Quantity)
WHEN String2 = '30' and String3 = '30' and String5 = '30' THEN SUM(String2Quantity+String3Quantity+String5Quantity)
WHEN String2 = '30' and String4 = '30' and String5 = '30' THEN SUM(String2Quantity+String4Quantity+String5Quantity)
WHEN String3 = '30' and String4 = '30' and String5 = '30' THEN SUM(String3Quantity+String4Quantity+String5Quantity)
WHEN String3 = '30' and String5 = '30' THEN SUM(String3Quantity+String5Quantity)
WHEN String3 = '30' and String4 = '30' THEN SUM(String3Quantity+String4Quantity)
WHEN String2 = '30' and String5 = '30' THEN SUM(String2Quantity+String5Quantity)
WHEN String2 = '30' and String4 = '30' THEN SUM(String2Quantity+String4Quantity)
WHEN String2 = '30' and String3 = '30' THEN SUM(String2Quantity+String3Quantity)
WHEN String1 = '30' and String5 = '30' THEN SUM(String1Quantity+String5Quantity)
WHEN String1 = '30' and String4 = '30' THEN SUM(String1Quantity+String4Quantity)
WHEN String1 = '30' and String3 = '30' THEN SUM(String1Quantity+String3Quantity)
WHEN String1 = '30' and String2 = '30' THEN SUM(String1Quantity+String2Quantity)
WHEN String5 = '30' THEN SUM(String5Quantity)
WHEN String4 = '30' THEN SUM(String4Quantity)
WHEN String3 = '30' THEN SUM(String3Quantity)
WHEN String2 = '30' THEN SUM(String2Quantity)
WHEN String1 = '30' THEN SUM(String1Quantity)
END AS '30',
CASE
WHEN String1 = '40' and String2 = '40' and String3 = '40' and String4 = '40' and String5 = '40' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String4Quantity+String5Quantity)
WHEN String1 = '40' and String2 = '40' and String3 = '40' and String4 = '40' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String4Quantity)
WHEN String1 = '40' and String2 = '40' and String3 = '40' and String5 = '40' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String5Quantity)
WHEN String1 = '40' and String3 = '40' and String4 = '40' and String5 = '40' THEN SUM(String1Quantity+String3Quantity+String3Quantity+String4Quantity)
WHEN String2 = '40' and String3 = '40' and String4 = '40' and String5 = '40' THEN SUM(String2Quantity+String3Quantity+String4Quantity+String5Quantity)
WHEN String1 = '40' and String2 = '40' and String3 = '40' THEN SUM(String1Quantity+String2Quantity+String3Quantity)
WHEN String1 = '40' and String2 = '40' and String4 = '40' THEN SUM(String1Quantity+String2Quantity+String4Quantity)
WHEN String1 = '40' and String2 = '40' and String5 = '40' THEN SUM(String1Quantity+String2Quantity+String5Quantity)
WHEN String1 = '40' and String3 = '40' and String4 = '40' THEN SUM(String1Quantity+String3Quantity+String4Quantity)
WHEN String1 = '40' and String3 = '40' and String5 = '40' THEN SUM(String1Quantity+String3Quantity+String5Quantity)
WHEN String1 = '40' and String4 = '40' and String5 = '40' THEN SUM(String1Quantity+String4Quantity+String5Quantity)
WHEN String2 = '40' and String3 = '40' and String4 = '40' THEN SUM(String2Quantity+String3Quantity+String4Quantity)
WHEN String2 = '40' and String3 = '40' and String5 = '40' THEN SUM(String2Quantity+String3Quantity+String5Quantity)
WHEN String2 = '40' and String4 = '40' and String5 = '40' THEN SUM(String2Quantity+String4Quantity+String5Quantity)
WHEN String3 = '40' and String4 = '40' and String5 = '40' THEN SUM(String3Quantity+String4Quantity+String5Quantity)
WHEN String3 = '40' and String5 = '40' THEN SUM(String3Quantity+String5Quantity)
WHEN String3 = '40' and String4 = '40' THEN SUM(String3Quantity+String4Quantity)
WHEN String2 = '40' and String5 = '40' THEN SUM(String2Quantity+String5Quantity)
WHEN String2 = '40' and String4 = '40' THEN SUM(String2Quantity+String4Quantity)
WHEN String2 = '40' and String3 = '40' THEN SUM(String2Quantity+String3Quantity)
WHEN String1 = '40' and String5 = '40' THEN SUM(String1Quantity+String5Quantity)
WHEN String1 = '40' and String4 = '40' THEN SUM(String1Quantity+String4Quantity)
WHEN String1 = '40' and String3 = '40' THEN SUM(String1Quantity+String3Quantity)
WHEN String1 = '40' and String2 = '40' THEN SUM(String1Quantity+String2Quantity)
WHEN String5 = '40' THEN SUM(String5Quantity)
WHEN String4 = '40' THEN SUM(String4Quantity)
WHEN String3 = '40' THEN SUM(String3Quantity)
WHEN String2 = '40' THEN SUM(String2Quantity)
WHEN String1 = '40' THEN SUM(String1Quantity)
END AS '40',
CASE
WHEN String1 = '50' and String2 = '50' and String3 = '50' and String4 = '50' and String5 = '50' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String4Quantity+String5Quantity)
WHEN String1 = '50' and String2 = '50' and String3 = '50' and String4 = '50' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String4Quantity)
WHEN String1 = '50' and String2 = '50' and String3 = '50' and String5 = '50' THEN SUM(String1Quantity+String2Quantity+String3Quantity+String5Quantity)
WHEN String1 = '50' and String3 = '50' and String4 = '50' and String5 = '50' THEN SUM(String1Quantity+String3Quantity+String3Quantity+String4Quantity)
WHEN String2 = '50' and String3 = '50' and String4 = '50' and String5 = '50' THEN SUM(String2Quantity+String3Quantity+String4Quantity+String5Quantity)
WHEN String1 = '50' and String2 = '50' and String3 = '50' THEN SUM(String1Quantity+String2Quantity+String3Quantity)
WHEN String1 = '50' and String2 = '50' and String4 = '50' THEN SUM(String1Quantity+String2Quantity+String4Quantity)
WHEN String1 = '50' and String2 = '50' and String5 = '50' THEN SUM(String1Quantity+String2Quantity+String5Quantity)
WHEN String1 = '50' and String3 = '50' and String4 = '50' THEN SUM(String1Quantity+String3Quantity+String4Quantity)
WHEN String1 = '50' and String3 = '50' and String5 = '50' THEN SUM(String1Quantity+String3Quantity+String5Quantity)
WHEN String1 = '50' and String4 = '50' and String5 = '50' THEN SUM(String1Quantity+String4Quantity+String5Quantity)
WHEN String2 = '50' and String3 = '50' and String4 = '50' THEN SUM(String2Quantity+String3Quantity+String4Quantity)
WHEN String2 = '50' and String3 = '50' and String5 = '50' THEN SUM(String2Quantity+String3Quantity+String5Quantity)
WHEN String2 = '50' and String4 = '50' and String5 = '50' THEN SUM(String2Quantity+String4Quantity+String5Quantity)
WHEN String3 = '50' and String4 = '50' and String5 = '50' THEN SUM(String3Quantity+String4Quantity+String5Quantity)
WHEN String3 = '50' and String5 = '50' THEN SUM(String3Quantity+String5Quantity)
WHEN String3 = '50' and String4 = '50' THEN SUM(String3Quantity+String4Quantity)
WHEN String2 = '50' and String5 = '50' THEN SUM(String2Quantity+String5Quantity)
WHEN String2 = '50' and String4 = '50' THEN SUM(String2Quantity+String4Quantity)
WHEN String2 = '50' and String3 = '50' THEN SUM(String2Quantity+String3Quantity)
WHEN String1 = '50' and String5 = '50' THEN SUM(String1Quantity+String5Quantity)
WHEN String1 = '50' and String4 = '50' THEN SUM(String1Quantity+String4Quantity)
WHEN String1 = '50' and String3 = '50' THEN SUM(String1Quantity+String3Quantity)
WHEN String1 = '50' and String2 = '50' THEN SUM(String1Quantity+String2Quantity)
WHEN String5 = '50' THEN SUM(String5Quantity)
WHEN String4 = '50' THEN SUM(String4Quantity)
WHEN String3 = '50' THEN SUM(String3Quantity)
WHEN String2 = '50' THEN SUM(String2Quantity)
WHEN String1 = '50' THEN SUM(String1Quantity)
END AS '50'
From #Split
Group by Id, String1, String2, String3, string4, String5
drop table #Split