Sql 带月计算的程序
名为Sql 带月计算的程序,sql,sql-server,Sql,Sql Server,名为数据的表 列为Id、名称、供应、需求、日期、值 创建一个过程,其中 列q1将包含第1季度的供应指数(1-3月,供应总额/需求总额) q2将包含第二季度的供应指数(4-6月,供应总额/需求总额) q3将包含第三季度的供应指数(7-9月,供应总额/需求总额) Q4将包含第四季度的供应指数(10月-12月,供应总额/需求总额),YR将包含给定年份的供应指数(1月-12月,供应总额/需求总额),并用值分隔 样本输入: ID Name Suppply Demand da
数据的表
列为Id、名称、供应、需求、日期、值
创建一个过程,其中
列q1
将包含第1季度的供应指数(1-3月,供应总额/需求总额)
q2
将包含第二季度的供应指数(4-6月,供应总额/需求总额)
q3
将包含第三季度的供应指数(7-9月,供应总额/需求总额)
Q4
将包含第四季度的供应指数(10月-12月,供应总额/需求总额),YR
将包含给定年份的供应指数(1月-12月,供应总额/需求总额),并用值分隔
样本输入:
ID Name Suppply Demand date value
1 A 10 5 01 04 2001 20
2 B 4 1 01 04 2001 20
3 A 4 2 02 01 2005 10
4 A 4 2 02 02 2005 10
5 B 4 1 01 07 2001 20
ID名称供应需求日期值
1 A 10 5 01 04 2001 20
2 B 4 1 01 04 2001 20
3 A 4 2 02 01 2005 10
4 A 4 2 02 02 2005 10
5 B 4 1 01 07 2001 20
预期产量
Name value q1 q2 q3 q4
A 10 4 0 0 0
A 20 0 2 0 0
B 20 0 4 4 0
名称值q1 q2 q3 q4
10400
20 0 2 0 0
B20440
所以你想要这样的东西:
CREATE TABLE #test
(
id INT,
name CHAR(1),
supply INT,
demand INT,
dates DATE,
value INT
)
INSERT INTO #test
VALUES (1,
'A',
10,
5,
'20010401',
20)
INSERT INTO #test
VALUES (2,
'B',
4,
1,
'20010401',
20)
INSERT INTO #test
VALUES (3,
'A',
4,
2,
'20050102',
10)
INSERT INTO #test
VALUES (4,
'A',
4,
2,
'20050202',
10)
INSERT INTO #test
VALUES (5,
'B',
4,
1,
'20010107',
20)
SELECT name,
value,
Isnull([q1], 0),
Isnull([q2], 0),
Isnull([q3], 0),
Isnull([q4], 0)
FROM (SELECT 'q' + Rtrim(Datepart(q, dates)) AS quarters,
name,
Sum(supply) / Sum(demand) AS val,
value
FROM #test
GROUP BY Datepart(q, dates),
name,
value) p
PIVOT ( Sum(val)
FOR quarters IN ([Q1],
[Q2],
[Q3],
[Q4])) AS pivottable;
drop table #test
下次请尝试组织更多您的文本:)您的预期输出与您对预期输出的描述不匹配。从预期产出来看,我不知道什么是优势,也不知道A在第一季度是如何拥有4的。考虑到这一点,给出答案有点困难。从我们的常见问题解答:询问代码的问题必须表明对所解决问题的最低理解。包括尝试过的解决方案、它们不起作用的原因以及预期结果。我们不是来帮你做作业的。你能告诉我Rtrim(Datepart(q,dates))是什么意思吗?哦,这是我经常犯的一个错误,我做Rtrim是因为Rtrim的角色是varchar,写起来比较短。