Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 拆分日期列,并根据结果计算金额_Sql Server - Fatal编程技术网

Sql server 拆分日期列,并根据结果计算金额

Sql server 拆分日期列,并根据结果计算金额,sql-server,Sql Server,在sales表中,我有一列包含每个销售的完整日期,我需要将其拆分,并在sales表中添加两个独立的月份和年份列,以及一个包含每个月所有销售总额的列 这是我的桌子- 销售表 客户识别码 日期 量 123 01/01/2020 6. 124 01/02/2020 7. 123 01/03/2021 5. 123 15/01/2020 4. 这里的一个问题是,计算列的结果与存储的数据不兼容。 例如,您不能为1月份的每一行构建1月份所有行的数量总和。您需要按日期分组并汇总数量 因此,我认为这可能是索引视

在sales表中,我有一列包含每个销售的完整日期,我需要将其拆分,并在sales表中添加两个独立的月份和年份列,以及一个包含每个月所有销售总额的列

这是我的桌子-

销售表

客户识别码 日期 量 123 01/01/2020 6. 124 01/02/2020 7. 123 01/03/2021 5. 123 15/01/2020 4.
这里的一个问题是,计算列的结果与存储的数据不兼容。 例如,您不能为1月份的每一行构建1月份所有行的数量总和。您需要按日期分组并汇总数量

因此,我认为这可能是索引视图的理想候选。这将允许您存储计算数据,同时将数据保留在原始表中

create table SalesTable (customer_id int, date date, quantity smallint);

insert SalesTable (customer_id, date, quantity)
select 123, '2020-01-01', 6
union
select 124, '2020-02-01', 7
union
select 123, '2021-03-01', 5
union
select 123, '2020-01-15', 4;

select * from SalesTable order by date; /*original data set*/

GO

CREATE VIEW dbo.vwSalesTable /*indexed view*/
   WITH SCHEMABINDING
   AS  
      SELECT customer_id, DATEPART(year, date) as year, datepart(MONTH, date) as 
month, SUM(quantity) as sum_quantity from dbo.SalesTable group by Customer_Id, 
DATEPART(year, date), DATEPART(MONTH, date)
  GO

  select * from vwSalesTable /*data from your indexed view*/

drop view vwSalesTable;
drop table SalesTable;

创建一个视图。顺便说一句,这是MS SQL Server还是?在提问时,您需要提供一个最小的可重复示例。请参考以下链接:请提供以下内容:(1)DDL和示例数据填充,即创建表和插入T-SQL语句。(2) 您需要做什么,即逻辑和代码尝试在T-SQL中实现它。(3) 所需输出,基于上述#1中的样本数据。(4) 您的SQL Server版本(选择@@version;)在SQL Server中。是否确实需要更改表结构?还是只需要一个按月/年返回销售总额的查询?多亏了你,我理解了这个想法。谢谢Wight Reynoldson,在每次跑步结束时,最后一张桌子的名字是什么?(或者,您在哪里定义了最终的表名)?因此名称可以是您喜欢的任何名称,通常对于视图,您将“vw”作为前缀。因此,在发送过来的示例中,我只是将索引视图称为vwSalesTable。