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