SQL两个日期计算字段之间的值之和

SQL两个日期计算字段之间的值之和,sql,sql-server,tsql,date,between,Sql,Sql Server,Tsql,Date,Between,我有一个查询,它返回null: SELECT SUM(sales) as [MAT] from TABLE2 where Date1 between CONVERT(VARCHAR(23), DATEADD(MONTH, -11, Date1), 111) and CONVERT(VARCHAR(23), DATEADD(MONTH, 0, Date1), 111); 在列中,date1的格式为YYYY-DD-MM,这就是我转换

我有一个查询,它返回null:

SELECT 
   SUM(sales) as [MAT]  
from 
   TABLE2 
where 
   Date1 between CONVERT(VARCHAR(23), DATEADD(MONTH, -11, Date1), 111) and 
                 CONVERT(VARCHAR(23), DATEADD(MONTH, 0, Date1), 111);
在列中,date1的格式为
YYYY-DD-MM
,这就是我转换它的原因

我想要两个日期之间每个日期的金额总和(另一个字段)

--更新--


您好,我已经将格式更改为
DATETIME
。现在查询如下所示:

SELECT 
   SUM(sales)as [MAT] 
from 
   TABLE2 
where 
   Date1 between DATEADD(MONTH,-11,Date1) and DATEADD(MONTH,0,Date1);

它显示了所有产品的总量,我想要每个产品的总量……有什么想法吗@DanBracuk

表2中的其他列是什么?具体而言,表中是否标识了产品名称

我敢肯定,你所需要的只是结尾的一组陈述。差不多

SELECT productName,sum(sales) 
FROM table 2 
WHERE date 1 between DATEADD(MONTH,-11,Date1) and DATEADD(MONTH,0,Date1) 
GROUP BY productName

表2中的其他列是什么?具体而言,表中是否标识了产品名称

我敢肯定,你所需要的只是结尾的一组陈述。差不多

SELECT productName,sum(sales) 
FROM table 2 
WHERE date 1 between DATEADD(MONTH,-11,Date1) and DATEADD(MONTH,0,Date1) 
GROUP BY productName

假设表中有一列名为“partid”,它是这样的:

select partid,sum(sales)
from 
 TABLE2 
where 
 Date1 between DATEADD(MONTH,-11,Date1) and DATEADD(MONTH,0,Date1);
group by partid

假设表中有一列名为“partid”,它是这样的:

select partid,sum(sales)
from 
 TABLE2 
where 
 Date1 between DATEADD(MONTH,-11,Date1) and DATEADD(MONTH,0,Date1);
group by partid

SQL两个日期计算字段之间的值之和

$sql =  "SELECT  `product_field_name`,
         SUM(CASE WHEN `DATE1_field_name` BETWEEN  '".$MINdate."' and '".$MAXdate."' THEN sales ELSE 0 END) AS 'MAT'
         FROM TABLE_name 
         GROUP BY `product_field_name`";

SQL两个日期计算字段之间的值之和

$sql =  "SELECT  `product_field_name`,
         SUM(CASE WHEN `DATE1_field_name` BETWEEN  '".$MINdate."' and '".$MAXdate."' THEN sales ELSE 0 END) AS 'MAT'
         FROM TABLE_name 
         GROUP BY `product_field_name`";

若您需要这两个日期之间的每个日期和产品的值之和,您应该将日期和产品字段作为分组依据添加

SELECT 
   Date1, product, SUM(sales)as [MAT] 
from 
   TABLE2 
where 
   Date1 between DATEADD(MONTH,-11,Date1) and DATEADD(MONTH,0,Date1)
group by Date1, product;

若您需要这两个日期之间的每个日期和产品的值之和,您应该将日期和产品字段作为分组依据添加

SELECT 
   Date1, product, SUM(sales)as [MAT] 
from 
   TABLE2 
where 
   Date1 between DATEADD(MONTH,-11,Date1) and DATEADD(MONTH,0,Date1)
group by Date1, product;

-你不应该把日期存储为字符串——那样只会自找麻烦。请使用
日期
日期时间
数据类型,就像您在表达式的左侧和右侧使用相同的日期字段一样。我想您希望中间右边的Date1变量是文字日期、查询的参数或其他字段。这也使得转换功能变得不必要@PaulChernoch说得很好。嗨,我已经把格式改成DATETIME了。现在查询如下所示:“从表2中选择SUM(sales)as[MAT],其中Date1介于DATEADD(MONTH,-11,Date1)和DATEADD(MONTH,0,Date1);”它显示了所有产品的总量,我想要每个产品的总量……有什么想法吗@Danbracuk您需要应用Group by like:'从表2中选择Product,SUM(sales)as[MAT],其中Date1介于DATEADD(月-11,Date1)和DATEADD(月,0,Date1)之间,Group by Product;-你不应该把日期存储为字符串——那样只会自找麻烦。请使用
日期
日期时间
数据类型,就像您在表达式的左侧和右侧使用相同的日期字段一样。我想您希望中间右边的Date1变量是文字日期、查询的参数或其他字段。这也使得转换功能变得不必要@PaulChernoch说得很好。嗨,我已经把格式改成DATETIME了。现在查询如下所示:“从表2中选择SUM(sales)as[MAT],其中Date1介于DATEADD(MONTH,-11,Date1)和DATEADD(MONTH,0,Date1);”它显示了所有产品的总量,我想要每个产品的总量……有什么想法吗@Danbracuk您需要应用Group by like:'从表2中选择Product,SUM(sales)as[MAT],其中Date1介于DATEADD(月-11,Date1)和DATEADD(月,0,Date1)之间按产品分组;