2016-12-19 19 views
0

私はいくつかの他の回答を検索しましたが、これが私の予想どおりに動作するようにはなっていません。SQL Server単純なSUMクエリが期待した結果を返さない

マイクエリ:

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

2016年12月15日---- 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

、ボーナス質問:どのように私は上の表をフォーマットしますがスタックオーバーフロー?

ありがとうございました!

+1

'group by'から' QUAN'を削除します。 –

+0

ありがとう、私は実際にそれを追加しましたが、私は様々な修正を試みていました。私はそれを削除しましたが、より大きな問題は、以下に指摘されているように変換された日付を使用していたことです。 – escapeclaws

答えて

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; 
+0

これは完璧に働いていただきありがとうございます。そのような簡単な監視。すぐにあなたの答えを受け入れます(10分) – escapeclaws

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の式を繰り返す必要があります。
  • 日付定数には、YYYYMMDDやYYYY-MM-DDなどのISO標準形式を使用します。
  • 日付に時間コンポーネントがあると思われる場合は、BETWEENを使用しないでください。
  • GROUP BYに集約されていない列のみを含めます。
+0

追加情報ありがとうございました、それは役に立ちます。なぜ日が時間的要素を持っているのか、その間に使用すべきでない理由を聞かせてもよろしいですか?さらに、<>対!=の優先順位がありますか?私は明らかに学習段階にあり、可能な限り標準に準拠したいと考えています。 – escapeclaws

関連する問題