SQL Server简单SUM查询未返回预期结果

时间:2016-12-19 13:39:30

标签: sql sql-server

我已经通过其他一些答案进行了搜索,但是还没有达到预期效果。

我的查询:

SELECT 
   CONVERT(VARCHAR(18),[Trx_Date],110) AS Date
  ,[TRX_TYPE]
  ,SUM([QUAN]) AS QUANt
  FROM [VM].[dbo].[INVTRX]
  WHERE SKU='7342761'  AND TRX_TYPE!='S' AND TRX_DATE BETWEEN '12-15-2016' AND '12-18-2016' AND ID_CONT=557
  GROUP BY QUAN, Trx_Type, TRX_DATE

我的结果:

  

日期---- TRX_TYPE ---- QUANt

     

12-15-2016 ---- PT ---- 48.0000

     

2016年12月16日---- PT ---- 78.0000

     

2016年12月16日---- PT ---- 90.0000

我在寻找:

  

日期---- TRX_TYPE ---- QUANt

     

12-15-2016 ---- PT ---- 48.0000

     

2016年12月16日---- PT ---- 168.0000

另外,还有一个问题:如何在Stackoverflow上格式化表?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

SELECT 
   CONVERT(VARCHAR(18),[Trx_Date],110) AS Date
  ,[TRX_TYPE]
  ,SUM([QUAN]) AS QUANt
  FROM [VM].[dbo].[INVTRX]
  WHERE SKU='7342761'  AND TRX_TYPE!='S' AND TRX_DATE BETWEEN '12-15-2016' AND '12-18-2016' AND ID_CONT=557
  GROUP BY Trx_Type, Trx_Date;

答案 1 :(得分:1)

您似乎在日期上有时间组件。我建议只转换为date而不是字符串:

SELECT CAST([Trx_Date] AS Date), TRX_TYPE
       SUM(QUAN) AS QUANT
FROM [VM].[dbo].[INVTRX] i
WHERE SKU = '7342761' AND
      TRX_TYPE <> 'S' AND
      TRX_DATE >= '2016-12-15' AND
      TRX_DATE < '2016-12-19' AND
      ID_CONT = 557
GROUP BY CAST([Trx_Date] AS Date), Trx_Type;

注意:

  • 转换为date以删除时间组件。
  • 您需要在GROUP BY
  • 中重复此表达式
  • 对于日期常量,使用ISO标准格式,例如YYYYMMDD或YYYY-MM-DD。
  • 如果您的日期有时间组件组件(它似乎有),请不要使用BETWEEN
  • 仅包含GROUP BY
  • 中的未聚合列