SQL拆分数据:

请问大家能否把图中两条记录用SQL语句,拆分为4条,也就是查询出来有12条记录,谢谢!
(拆分的依据是S1,S2,S3,S4中有没有数量,有的话独立开来),求救!!!
比如这两条记录用SQL语句拆分以后是这种格式:
比如:arrival_id manual_id supply_no warehouse_no goods_no colorid long s1 s2 s3 s4
123456 abcd 123a kkk fff ddd 0 0 5 0 0
123456 abcd 123a kkk fff ddd 0 0 0 9 0
123456 abcd 123a kkk zzz ddd 0 0 4 0 0
123456 abcd 123a kkk zzz ddd 0 0 0 1 0
解决方案:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
DECLARE @TBL TABLE(arrival_id INT,manual_id VARCHAR(99),supply_no VARCHAR(99),warehouse_no VARCHAR(99),goods_no VARCHAR(99),colorid VARCHAR(99),long INT,s1 INT,s2 INT,s3 INT,s4 INT);INSERT INTO @TBL VALUES(123456,'abcd','123a','kkk','fff','ddd',0,0,5,9,0), (123456,'abcd','123a','kkk','fff','ddd',0,0,4,1,0);;WITH CTE AS(SELECT arrival_id,manual_id,supply_no,warehouse_no,goods_no,colorid,long,value,s From @TBLunpivot([value] for s in([s1],[s2],[s3],[s4]) )as T)SELECT arrival_id,manual_id,supply_no,warehouse_no,goods_no,colorid,long,CASE WHEN S='s1' then value else 0 end as S1,CASE WHEN S='s2' then value else 0 end as S2,CASE WHEN S='s3' then value else 0 end as S3,CASE WHEN S='s4' then value else 0 end as S4FROM CTE WHERE value <>0 |

2:
Left join 后,想把获取的值放在一起
表A,
ID , Name,
1,张三
2,李四
表B,
Name, Remark
张三, AAA
张三,BBB
李四, AAA
最后想得到结果,
ID , Name,Remark
1,张三, (AAA,BBB)
2,李四, AAA
解决办法:
ID , Name,
1,张三
2,李四
表B,
Name, Remark
张三, AAA
张三,BBB
李四, AAA
最后想得到结果,
ID , Name,Remark
1,张三, (AAA,BBB)
2,李四, AAA
解决办法:
SELECT ID,Name ,STUFF(( SELECT ','+Remark FROM B T2 WHERE T1.Name=T2.Name FOR XML PATH('') ),1,1,'')AS RemarkFROM A T1
本文探讨如何使用SQL语句将数据集拆分为多个独立记录,并通过左连接操作将不同数据集整合在一起,实现数据的高效管理和利用。
281

被折叠的 条评论
为什么被折叠?



