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 @TBL unpivot ([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 S4 FROM 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
Remark
FROM
A T1