2013-07-12 100 views
1

我有這個疑問,它返回null:SQL SUM計算字段

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); 

在列,日期1格式爲YYYY-DD-MM,這就是爲什麼我把它轉換。

我想從產品(另一場),每個日期的金額這兩個日期之間的總和。

--UPDATE--

嗨,我已經改變了格式DATETIME。現在查詢看起來是這樣的:

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

它顯示了我所有產品的總量,並且我希望總數爲每個...任何想法? @DanBracuk

+1

[不良習慣踢:錯誤處理日期/範圍查詢(http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling -date-range-queries.aspx) - 你應該**不要**將日期存儲爲字符串 - 你只是要求這樣的麻煩。 ***請使用'DATE'或'DATETIME'數據類型 –

+2

看起來您在BETWEEN表達式的左側和右側使用了相同的日期字段。我認爲你希望BETWEEN右邊的Date1變量是文字日期,或者查詢的參數或其他字段。 –

+1

在我看來,date1是一個日期/日期時間數據類型,所以部分是好的。它也使轉換功能不必要。 @PaulChernoch說得很好。 –

回答

0

在表2什麼其他列?具體是表中標識的產品名稱?

我敢肯定你需要的是一組由語句結尾。像

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

假設你已經得到了在被稱爲「PARTID」的表中的列的東西,它會是這樣的:兩個日期之間的數值

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

SQL SUM計算字段

$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`"; 
0

如果由這兩個日期之間的產品需要爲每個日期值的總和,你建議立即進行刪除添加的日期和產品領域的一組通過;

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;