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,写起来比较短。