22,206
社区成员
发帖
与我相关
我的任务
分享
CREATE TABLE TB ([代码] VARCHAR(13), [数据] INT)
INSERT TB
SELECT '0.01', null UNION ALL
SELECT '0.01.01', null UNION ALL
SELECT '0.01.01.01', 100.00 UNION ALL
SELECT '0.01.02', null UNION ALL
SELECT '0.01.02.01', 100.00 UNION ALL
SELECT '0.01.02.02', null UNION ALL
SELECT '0.01.02.02.01', 100.00 UNION ALL
SELECT '0.01.02.02.02', 100.00 UNION ALL
SELECT '0.01.03', 100.00
1.
SELECT *,(SELECT SUM([数据]) FROM TB WHERE [代码] LIKE T.[代码]+'%') AS 计算结果
FROM TB AS T
2.
SELECT *,(SELECT SUM([数据]) FROM TB WHERE charindex(T.[代码],[代码])=1) AS 计算结果
FROM TB AS T
select *,(select sum(isnull([数据],0)) from @tb where charindex(','+t.代码,','+代码)>0) as 计算结果
from @tb as t
DECLARE @TB TABLE([代码] VARCHAR(13), [数据] INT)
INSERT @TB
SELECT '0.01', null UNION ALL
SELECT '0.01.01', null UNION ALL
SELECT '0.01.01.01', 100.00 UNION ALL
SELECT '0.01.02', null UNION ALL
SELECT '0.01.02.01', 100.00 UNION ALL
SELECT '0.01.02.02', null UNION ALL
SELECT '0.01.02.02.01', 100.00 UNION ALL
SELECT '0.01.02.02.02', 100.00 UNION ALL
SELECT '0.01.03', 100.00
SELECT *,(SELECT SUM([数据]) FROM @TB WHERE charindex('.'+T.[代码]+'.','.'+[代码]+'.')>0) AS 计算结果
FROM @TB AS T
/*
代码 数据 计算结果
------------- ----------- -----------
0.01 NULL 500
0.01.01 NULL 100
0.01.01.01 100 100
0.01.02 NULL 300
0.01.02.01 100 100
0.01.02.02 NULL 200
0.01.02.02.01 100 100
0.01.02.02.02 100 100
0.01.03 100 100
(所影响的行数为 9 行)
*/
--改下4楼的
declare @tb table([代码] varchar(20), [数据] int)
insert @tb
select '0.01', null union all
select '0.01.01', null union all
select '0.01.01.01', 100.00 union all
select '0.01.02', null union all
select '0.01.02.01', 100.00 union all
select '0.01.02.02', null union all
select '0.01.02.02.01', 100.00 union all
select '0.01.02.02.02', 100.00 union all
select '0.01.03', 100.00
select 代码,(select sum(isnull([数据],0)) from @tb where charindex(','+t.代码,','+代码)>0) as 计算结果
from @tb as t
/*
代码 计算结果
-------------------- ----------- -----------
0.01 500
0.01.01 100
0.01.01.01 100
0.01.02 300
0.01.02.01 100
0.01.02.02 200
0.01.02.02.01 100
0.01.02.02.02 100
0.01.03 100
(9 行受影响)
*/
DECLARE @TB TABLE([代码] VARCHAR(13), [数据] INT)
INSERT @TB
SELECT '0.01', null UNION ALL
SELECT '0.01.01', null UNION ALL
SELECT '0.01.01.01', 100.00 UNION ALL
SELECT '0.01.02', null UNION ALL
SELECT '0.01.02.01', 100.00 UNION ALL
SELECT '0.01.02.02', null UNION ALL
SELECT '0.01.02.02.01', 100.00 UNION ALL
SELECT '0.01.02.02.02', 100.00 UNION ALL
SELECT '0.01.03', 100.00
SELECT *,(SELECT SUM([数据]) FROM @TB WHERE charindex(T.[代码],[代码])>0) AS 计算结果
FROM @TB AS T
/*
代码 数据 计算结果
------------- ----------- -----------
0.01 NULL 500
0.01.01 NULL 100
0.01.01.01 100 100
0.01.02 NULL 300
0.01.02.01 100 100
0.01.02.02 NULL 200
0.01.02.02.01 100 100
0.01.02.02.02 100 100
0.01.03 100 100
(所影响的行数为 9 行)
*/
select *
from tb A where qty= (select sum(qty) from tb as A where A.col1 like rtrim(T.col1)+'%')
and qty is null
declare @tb table([代码] varchar(20), [数据] int)
insert @tb
select '0.01', null union all
select '0.01.01', null union all
select '0.01.01.01', 100.00 union all
select '0.01.02', null union all
select '0.01.02.01', 100.00 union all
select '0.01.02.02', null union all
select '0.01.02.02.01', 100.00 union all
select '0.01.02.02.02', 100.00 union all
select '0.01.03', 100.00
select *,(select sum(isnull([数据],0)) from @tb where charindex(','+t.代码,','+代码)>0) as 计算结果
from @tb as t
/*
代码 数据 计算结果
-------------------- ----------- -----------
0.01 NULL 500
0.01.01 NULL 100
0.01.01.01 100 100
0.01.02 NULL 300
0.01.02.01 100 100
0.01.02.02 NULL 200
0.01.02.02.01 100 100
0.01.02.02.02 100 100
0.01.03 100 100
(9 行受影响)
*/
select *
from tb where qty= (select sum(qty) from T as A where A.col1 like rtrim(T.col1)+'%')
and qty is null
create table T(col1 varchar(50), qty int)
insert into T
select '0.01', null
union all select '0.01.01', null
union all select '0.01.01.01', 100.00
union all select '0.01.02' ,null
union all select '0.01.02.01', 100.00
union all select '0.01.02.02',null
union all select '0.01.02.02.01', 100.00
union all select '0.01.02.02.02' , 100.00
union all select '0.01.03' , 100.00
GO
Update T
set qty= (select sum(qty) from T as A where A.col1 like rtrim(T.col1)+'%')
where qty is null
Go
select * from T
/*
0.01 500
0.01.01 100
0.01.01.01 100
0.01.02 300
0.01.02.01 100
0.01.02.02 200
0.01.02.02.01 100
0.01.02.02.02 100
0.01.03 100
*/
GO
drop table T
DECLARE @TB TABLE([代码] VARCHAR(13), [数据] INT)
INSERT @TB
SELECT '0.01', null UNION ALL
SELECT '0.01.01', null UNION ALL
SELECT '0.01.01.01', 100.00 UNION ALL
SELECT '0.01.02', null UNION ALL
SELECT '0.01.02.01', 100.00 UNION ALL
SELECT '0.01.02.02', null UNION ALL
SELECT '0.01.02.02.01', 100.00 UNION ALL
SELECT '0.01.02.02.02', 100.00 UNION ALL
SELECT '0.01.03', 100.00
SELECT *,(SELECT SUM([数据]) FROM @TB WHERE [代码] LIKE T.[代码]+'%') AS 计算结果
FROM @TB AS T
/*
代码 数据 计算结果
------------- ----------- -----------
0.01 NULL 500
0.01.01 NULL 100
0.01.01.01 100 100
0.01.02 NULL 300
0.01.02.01 100 100
0.01.02.02 NULL 200
0.01.02.02.01 100 100
0.01.02.02.02 100 100
0.01.03 100 100
警告: 聚合或其他 SET 操作消除了空值。
(9 row(s) affected)
*/