Выберите данные между диапазонами дат из 2 таблиц - PullRequest
1 голос
/ 11 июля 2011

Предположим, у меня есть две таблицы

  1. Налоги
  2. Продукты

Я хочу выбрать сумму значений продукта, умноженную на их соответствующее значение НДС вТаблица налогов в процентах, где дата продукта меньше даты налога, а 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

Кто-нибудь мне поможет?

Ответы [ 3 ]

2 голосов
/ 11 июля 2011

Здесь есть несколько проблем:

Как указано в комментариях, вы получите +, а затем *

В таблице Налогов date всегда имеет значение меньше mdate. Ваш WHERE тест имеет x.date>t.datee and x.mDate<=t.date, что означает, что x.date больше x.mDate. Это всегда будет ложным

Вы написали t.date с дополнительным знаком e в предложении WHERE

Вы ошиблись products в качестве имени таблицы.

Кроме того, использование t в качестве псевдонима для products и x в качестве псевдонима для tax действительно сбивает с толку.

1 голос
/ 11 июля 2011
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 голосов
/ 11 июля 2011
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...