汇总各类产品第一道工序的总和

snlixing 2020-04-30 02:58:16
只汇总各类产品第一道工序的总和

产品名称 工序名称 数量
AAA 工序1 100
AAA 工序2 50
AAA 工序3 100
BBB 工序2 100
CCC 工序1 100
CCC 工序3 100


汇总各产品第一道工序的合计为300,AAA第一道工序为工序1,BBB第一道工序为工序2,CCC第一道工序为工序1
...全文
127 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
_Asura 2020-04-30
  • 打赏
  • 举报
回复
楼上正解,不管你是用递归还是分组排序,都得需要一个规则来确定工序的取值方式。
RINK_1 2020-04-30
  • 打赏
  • 举报
回复
引用 8 楼 snlixing 的回复:
[quote=引用 6 楼 RINK_1 的回复:] [quote=引用 3 楼 snlixing 的回复:] [quote=引用 1 楼 RINK_1 的回复:] SELECT SUM(数量) FROM TABLE A WHERE NOT EXISTS (SELECT 1 FROM TABLE WHERE 产品名称=A.产品名称 AND 工序名称<A.工序名称)
工序名称只是一个代名词,不一定是工序1,工序2这样的[/quote] 如果不能直接排序比较,那你得有个辅助表来定义每个产品的每道工序,同时标识各工序的顺序。 [/quote]
SELECT SUM(LSTotalWeight) as TotalWeight,ContractNO,productno,techflag
FROM TechniqueInfo A
WHERE NOT EXISTS (SELECT 1 FROM TechniqueInfo WHERE ContractNO=A.ContractNO and Productno=A.Productno AND techflag<A.techflag)  and (techflag='LS' or techflag='NX' or techflag='YZ' )   group by ContractNO,productno,techflag
这是我写的,统计的数据不对呢[/quote] 那你就把你要的3道工序生成一个带序号的辅助表,比如以下,然后再和业务表关联进行处理

SELECT 'LS' AS STEP,1 AS ID UNION ALL
SELECT 'NX',2 UNION ALL
SELECT 'YZ',3
snlixing 2020-04-30
  • 打赏
  • 举报
回复
引用 6 楼 RINK_1 的回复:
[quote=引用 3 楼 snlixing 的回复:]
[quote=引用 1 楼 RINK_1 的回复:]
SELECT SUM(数量)
FROM TABLE A
WHERE NOT EXISTS (SELECT 1 FROM TABLE WHERE 产品名称=A.产品名称 AND 工序名称<A.工序名称)


工序名称只是一个代名词,不一定是工序1,工序2这样的[/quote]

如果不能直接排序比较,那你得有个辅助表来定义每个产品的每道工序,同时标识各工序的顺序。
[/quote]

SELECT SUM(LSTotalWeight) as TotalWeight,ContractNO,productno,techflag
FROM TechniqueInfo A
WHERE NOT EXISTS (SELECT 1 FROM TechniqueInfo WHERE ContractNO=A.ContractNO and Productno=A.Productno AND techflag<A.techflag) and (techflag='LS' or techflag='NX' or techflag='YZ' ) group by ContractNO,productno,techflag


这是我写的,统计的数据不对呢
snlixing 2020-04-30
  • 打赏
  • 举报
回复
引用 5 楼 _Asura 的回复:
[quote=引用 4 楼 snlixing 的回复:]
[quote=引用 2 楼 _Asura 的回复:]
分组排序

if object_id('tempdb..#tab')is not null drop table #tab
create table #tab(name nvarchar(500),class nvarchar(500),quantity decimal(18,2))
insert into #tab(name,class,quantity)
select 'AAA','工序1',100 union all
select 'AAA','工序2',50 union all
select 'AAA','工序3',100 union all
select 'BBB','工序2',100 union all
select 'CCC','工序1',100 union all
select 'CCC','工序1',100

select sum(quantity) from(
select row_number()over(partition by name order by class)as num , * from #tab
)t where num='1'



工序名称只是一个代名词,不一定是工序1,工序2这样排序的名称的 ,还能是其他的名称[/quote]

那怎么区分AAA的第一道工序和第二道工序呢?[/quote]


现有工序编码是这样的,LS,NX,YZ,NS,BZ,只需要比较LS,NX,YZ这三个工序的就行,我写出来的不对呢

SELECT SUM(LSTotalWeight) as TotalWeight,ContractNO,productno,techflag
FROM TechniqueInfo A
WHERE NOT EXISTS (SELECT 1 FROM TechniqueInfo WHERE ContractNO=A.ContractNO and Productno=A.Productno AND techflag<A.techflag) and (techflag='LS' or techflag='NX' or techflag='YZ' )
RINK_1 2020-04-30
  • 打赏
  • 举报
回复
引用 3 楼 snlixing 的回复:
[quote=引用 1 楼 RINK_1 的回复:] SELECT SUM(数量) FROM TABLE A WHERE NOT EXISTS (SELECT 1 FROM TABLE WHERE 产品名称=A.产品名称 AND 工序名称<A.工序名称)
工序名称只是一个代名词,不一定是工序1,工序2这样的[/quote] 如果不能直接排序比较,那你得有个辅助表来定义每个产品的每道工序,同时标识各工序的顺序。
_Asura 2020-04-30
  • 打赏
  • 举报
回复
引用 4 楼 snlixing 的回复:
[quote=引用 2 楼 _Asura 的回复:] 分组排序

if object_id('tempdb..#tab')is not null drop table #tab
create table #tab(name nvarchar(500),class nvarchar(500),quantity decimal(18,2))
insert into #tab(name,class,quantity)
select 'AAA','工序1',100 union all
select 'AAA','工序2',50 union all
select 'AAA','工序3',100 union all
select 'BBB','工序2',100 union all
select 'CCC','工序1',100 union all
select 'CCC','工序1',100 

select sum(quantity) from(
	select row_number()over(partition by name order by class)as num , * from #tab
)t where num='1'
工序名称只是一个代名词,不一定是工序1,工序2这样排序的名称的 ,还能是其他的名称[/quote] 那怎么区分AAA的第一道工序和第二道工序呢?
snlixing 2020-04-30
  • 打赏
  • 举报
回复
引用 2 楼 _Asura 的回复:
分组排序

if object_id('tempdb..#tab')is not null drop table #tab
create table #tab(name nvarchar(500),class nvarchar(500),quantity decimal(18,2))
insert into #tab(name,class,quantity)
select 'AAA','工序1',100 union all
select 'AAA','工序2',50 union all
select 'AAA','工序3',100 union all
select 'BBB','工序2',100 union all
select 'CCC','工序1',100 union all
select 'CCC','工序1',100

select sum(quantity) from(
select row_number()over(partition by name order by class)as num , * from #tab
)t where num='1'



工序名称只是一个代名词,不一定是工序1,工序2这样排序的名称的 ,还能是其他的名称
snlixing 2020-04-30
  • 打赏
  • 举报
回复
引用 1 楼 RINK_1 的回复:
SELECT SUM(数量)
FROM TABLE A
WHERE NOT EXISTS (SELECT 1 FROM TABLE WHERE 产品名称=A.产品名称 AND 工序名称<A.工序名称)


工序名称只是一个代名词,不一定是工序1,工序2这样的
_Asura 2020-04-30
  • 打赏
  • 举报
回复
分组排序

if object_id('tempdb..#tab')is not null drop table #tab
create table #tab(name nvarchar(500),class nvarchar(500),quantity decimal(18,2))
insert into #tab(name,class,quantity)
select 'AAA','工序1',100 union all
select 'AAA','工序2',50 union all
select 'AAA','工序3',100 union all
select 'BBB','工序2',100 union all
select 'CCC','工序1',100 union all
select 'CCC','工序1',100 

select sum(quantity) from(
	select row_number()over(partition by name order by class)as num , * from #tab
)t where num='1'
RINK_1 2020-04-30
  • 打赏
  • 举报
回复
SELECT SUM(数量) FROM TABLE A WHERE NOT EXISTS (SELECT 1 FROM TABLE WHERE 产品名称=A.产品名称 AND 工序名称<A.工序名称)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧