Sql server 从2个表中选择日期范围之间的数据

Sql server 从2个表中选择日期范围之间的数据,sql-server,tsql,sql-server-2005,Sql Server,Tsql,Sql Server 2005,假设我有两张桌子 税 产品 我想选择产品价值乘以税收表中各自增值税价值的总和,作为百分比,其中产品日期小于纳税日期,mDate小于产品日期,按增值税或ttid分组 比如说 Taxes products ttid date value mDate Vat value date 0 02-06-11 20 03

假设我有两张桌子

税 产品 我想选择产品价值乘以税收表中各自增值税价值的总和,作为百分比,其中产品日期小于纳税日期,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

有人能帮我吗?

这里有几个问题:

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 
正如你在评论中所说的,后面是*


在税务表中,日期的值始终小于mdate。你的WHERE测试有x.date>t.datee和x.MDATE假设这些增值税和税收的谈话意味着这些金额中的一个或多个是货币,请不要使用浮动-使用适当的比例和精度。你能检查你的总和计算吗。你有+后跟*我有错误!无法对包含聚合或子查询的表达式执行聚合函数
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