2011-07-11 30 views
1

讓假設我有兩個表選擇數據

  1. 產品

我要選擇的產品值乘以稅各自的增值稅值的總和表格的百分比,其中產品的日期小於稅收日期且mDate小於產品日期,按增值稅分組或ttid

例如

 Taxes           products 

ttid  date value mDate     Vat value date 
    0  02-06-11 20 03-07-11    0  15 01-07-11 
    1  03-07-11 10 03-08-11    0  15 01-07-11 
    0  03-07-11 14 03-08-11    0  15 02-08-11 
    1  03-08-11 15 03-09-11    1  10 04-07-11 
                1  10 06-08-11 
                1  10 08-09-11 --this will not include 

所以我的結果看起來像這樣。

TTId Value 
0  3+3+2.1=8.1 
1  1.5+1=2.5 

我到目前爲止寫的查詢。

select sum 
      ( 
      (cast(t.Value as float) 
      * 
      (cast(x.value as float)/100) 
     ) 
    as 'Vat' 
    ,x.ttid 
from prducts t 
,taxes x where x.ttid=t.vat and x.mDate>t.date and x.date<=t.date 
group by x.ttid 

有人能幫助我嗎?

+0

假設增值稅和所得稅的這些會談是指一個或多個這些金額是貨幣,請不要使用float - 使用[十進制](http://msdn.microsoft.com/en-us/庫/ ms187746.aspx)以合適的比例和精度。 –

+1

你能檢查你的SUM計算嗎?您有+後跟* – gbn

回答

0
select sum(Vat)'Vat',itemvat,sum(productvalue)'ProductValue' from 
(
SELECT 
t.vat, 
t.value, 
    isnull(t.value * 
    (SELECT TOP 1 value FROM #TMP x where x.ttid=t.vat and 
convert(varchar,cast(x.effectiveDate as datetime),3)>convert(varchar,cast(t.date as datetime),3) 
and convert(varchar,cast(x.mDate as datetime),3)<=convert(varchar,cast(t.date as datetime),3) 

)/100,'5') 
as 'Vat' 
FROM products t 
) 
as t where Vat<>'5' group by itemvat 
1
SELECT 
    SUM(t.Value * 
    ISNULL((SELECT TOP 1 value FROM taxes x where x.ttid=t.vat and t.date BETWEEN x.date AND x.mDate order by t.datee), 100)/100) as 'Vat' 
FROM prducts t 
+0

我收到錯誤!無法對包含聚合或子查詢的表達式執行聚合函數 –

2

這裏有幾個問題:

正如評論說你有+其次*

在稅率表date總是比mdate以下的值。您的WHERE測試有x.date>t.datee and x.mDate<=t.date,這意味着x.date大於x.mDate。這將始終是假

你拼寫t.dateWHERE條款

一個額外的e您拼錯products作爲表的名稱。

另外,使用t作爲productsx的別名作爲tax的別名是非常令人困惑的。