SQL 数据库疑难解决方案集合

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  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  end   as  S1,
CASE   WHEN  S= 's2'  then  value  else  end   as  S2,
CASE   WHEN  S= 's3'  then  value  else  end   as  S3,
CASE   WHEN  S= 's4'  then  value  else  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
解决办法:
SELECT  ID, Name
     ,STUFF((
         SELECT  ',' +Remark
         FROM  B T2
         WHERE  T1. Name =T2. Name
         FOR  XML PATH( '' )
     ),1,1, '' ) AS  Remark
FROM  A T1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值