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

本文探讨如何使用SQL语句将数据集拆分为多个独立记录,并通过左连接操作将不同数据集整合在一起,实现数据的高效管理和利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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、付费专栏及课程。

余额充值