问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于SQL数据汇总求助

发布网友 发布时间:2022-04-30 18:31

我来回答

3个回答

热心网友 时间:2022-06-30 00:33

select 编码,名称,sum(case 类型 when '入仓' then 数量 else 0 end) as 入仓数量,
sum(case 类型 when '出仓' then 数量 else 0 end) as 出仓数量,
sum(case 类型 when '退仓' then 数量 else 0 end) as 退仓数量,

from table
group by 编码,名称

热心网友 时间:2022-06-30 00:34

这是一个静态交叉表的实现。
一句SQL 是搞不定的。
关于交叉表的概念你可以百度看看

这里贴一个存储过程,可以方便你的使用

CREATE PROCEDURE UP_TEST(
@T1 VARCHAR(30),@T2 VARCHAR(30),
@T3 VARCHAR(30),@T4 VARCHAR(30)) AS
--T1 表名,T2,T3是原始表的两个分类字段,T4是原始表汇总字段
--T2是行字段,T3列字段
BEGIN
DECLARE @SQL VARCHAR(7999),@FIELD VARCHAR(30)
SELECT @SQL='SELECT DISTINCT '+@T3+' FROM '+@T1
CREATE TABLE #FIELD(FIELD VARCHAR(30))
--将列字段提取到临时表#FIELD中
INSERT INTO #FIELD EXEC(@SQL)
SELECT @SQL='CREATE TABLE CROSS_TEST('+@T2+' VARCHAR(30),'
DECLARE CUR_FIELD CURSOR LOCAL FOR SELECT * FROM #FIELD
OPEN CUR_FIELD
FETCH CUR_FIELD INTO @FIELD
WHILE @@FETCH_STATUS=0 BEGIN
SELECT @FIELD='['+@FIELD+']'
SELECT @SQL=@SQL+@FIELD+' DECIMAL(8,2) DEFAULT 0,'
FETCH CUR_FIELD INTO @FIELD
END
SELECT @SQL=LEFT(@SQL,LEN(@SQL)-1)+')'
--创建临时交叉表CROSS_TEST
EXEC(@SQL)
SELECT @SQL='INSERT INTO CROSS_TEST('+@T2+') SELECT DISTINCT '+@T2+' FROM '+@T1
--将行数据存入交叉表#CROSS_TEST
EXEC(@SQL)
--创建分组数据表TEMP
SELECT @SQL='CREATE TABLE TEMP('+@T2+' VARCHAR(30),'+@T3+' VARCHAR(30),'+@T4+' DECIMAL(8,2))'
EXEC(@SQL)
--将交叉汇总数据放入交叉表
SELECT @SQL='SELECT '+@T2+','+@T3+', SUM(QTY) QTY FROM '+@T1 +' GROUP BY '+@T2+','+@T3
INSERT INTO TEMP EXEC(@SQL)
--将汇总数据写入交叉表
DECLARE CUR_SUM CURSOR LOCAL FOR SELECT * FROM TEMP
DECLARE @F1 VARCHAR(30),@F2 VARCHAR(30),@QTY DECIMAL(8,2),@Q1 VARCHAR(30)
OPEN CUR_SUM
FETCH CUR_SUM INTO @F1,@F2,@QTY
WHILE @@FETCH_STATUS=0 BEGIN
SELECT @F2='['+@F2+']',@Q1=CAST(@QTY AS VARCHAR(30))
SELECT @SQL='UPDATE CROSS_TEST SET '+@F2+'='+@Q1+' WHERE '+@T2+'='''+@F1+''''
EXEC(@SQL)
FETCH CUR_SUM INTO @F1,@F2,@QTY
END
CLOSE CUR_SUM
SELECT * FROM CROSS_TEST
DROP TABLE TEMP
DROP TABLE CROSS_TEST
DROP TABLE #FIELD
END

热心网友 时间:2022-06-30 00:34

select 编码,名称,sum(case 类型 when '入仓' then 数量 else 0 end) as 入仓数量,
sum(case 类型 when '出仓' then 数量 else 0 end) as 出仓数量,
sum(case 类型 when '退仓' then 数量 else 0 end) as 退仓数量,
sum(case 类型 when '入仓' then 数量 when '出仓' then 0-数量 when '退仓' then 数量 end ) as 库存总数
from table
group by 编码,名称
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
汽车胎扎了个钉子是拔还是不拔? 台式机电源什么牌子好 台式机电源有哪些牌子 金牌 银牌 铜牌电源哪个好 台式机电源等级性能解析 电脑电源推荐-全汉(FSP) 500W银牌(88%)全模组SFX电源 我的妻子背叛了我,我该怎么办, 初一语文复习材料(急急急!!!) 绿色蝈蝈课后题答案七上语文 女人梦见黄鼠狼的七大预兆 怎么知道注塑机螺杆有无卡死现象? 请问为什么在钢之炼金术师fa里,爱德华一开始不用炼金术换 市场容量是什么意思 相亲对象给你发我脑瓜子嗡嗡的,明天给你赔罪好不好女生应该怎么回答他? 市场上出现“物以稀为贵”现象的原因可能是 A.商品过剩 B.持币待购 C.供不应求 D.供过于 求一SQL语句 例如表数据为: A 3 B 2 C 4 理想输出为: A A A B B C C C C 脑瓜子嗡嗡的,老响,这是什么病? 买车返利是什么意思? 用js写个导航栏的红色线条,第一个显示,滑动到第二个显示,第一个消 斯维尔三维算量打开后,中间有一个光标,删不掉。怎么办 如图右下角。 CAD打开的时候十字光标是斜的怎么处理,我是天正转T3后光标变斜的,在天正里是正的 请求高手优化sql查询速度!!!!! 不分组查询很快,分组后超慢,求解决方法 微信群消息怎么屏蔽 如何不接群消息 ,男人说在翁翁是什么意思啊? 高分:分油问题,c++怎么编程? 怎样设置不接群消息 用友T3用友通标准版在建立新年度帐的时候提示“列名curgroupcol无效”,具体情况下付 LED显示屏的长排线怎么算的? 用友T3建立新账时出现“列名curgroupcol无效”,麻烦啊 当人们对通货膨胀的预期较高时,往往会增加消费,减少储蓄,抢购和持币待购成为普遍现象 新苹果手机怎么激活 用友T3通用版在建年度新账时出现“列名curgroupcol无效”请问我该怎么解决,请详细指教? mysql存储过程中光标所指向的记录在打开光标之前可以改变吗 市场规模与产业规模分别是什么意思? 还是Matlab程序问题 VB32与VB64的区别 sql查询横排 用友T3 10.8PLUS1升级老版本数据库时提示 -2147217900 列名 iTaxUnitPrice 无效 烙筋饼用高筋面粉还是低筋面粉 什么是“口红效应”? C++ C语言程序设计 题目:贷款计算器 东北筋饼怎么做,用什么样的面粉做 Informix存储过程题(谁能解决,小弟万分感谢) 32位和64位是什么意思? 职能资本是什么意思? 汽车市场的‘井喷’指是什么? 制作筋饼用什么面粉好 想吃榆林筋饼自己在家怎么做? 怎样和面可以使筋饼即软又劲道? 依莹这名字意思还可以吗 姓易名依莹,给女孩起名怎么样 祝依莹生日快乐藏头诗