powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / помогите написать запрос на Firebird, Interbase 2009
25 сообщений из 29, страница 1 из 2
помогите написать запрос на Firebird, Interbase 2009
    #39327365
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такой алгоритм:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
If моя фирма не плательщик ндс-налога(vat) then vat:=0  
Else begin
   if  поставщик ндс-плательщик then begin
       if Goods.taxable=0 then vat"=0
       else vat:=price*18/118;
   end
   else vat:=0;
end;



На Firebird выполняется внутренная часть и правильно возврашает результат:
Код: sql
1.
2.
3.
4.
5.
if  поставщик ндс-плательщик then begin
       if Goods.taxable=0 then vat"=0
       else vat:=price*18/118;
   end
   else vat:=0;



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select Goods_Id, income_id, Qty, Price, vatpayer, Price*Qty as summa,

CASE when Vatpayer=1 then 
  case 
    when taxable=0 then 0
    when taxable=1 then Price*18/118
  end  
Else 0
END AS Vat
 
from Income, partn
where Income.part_id=partn.part_id
group by Goods_id, Income_id, Qty, Price, vatpayer, Summa,Vat



но как связывать эту часть запроса,
Код: sql
1.
2.
3.
4.
If моя фирма не плательщик ндс-налога(vat) then vat:=0  
      Else begin
      ....
      end;


если таблица VatPayable, где записано моя фирма платит или нет ндс (VatPayable=0 or =1), не связан с таблицами Income и Partn?

И второй вопрос: тот-же самый запрос выдаёт ошибку на Interbase 2009: Column Unknown если в group by написан Summa,Vat, а если без ных, тогда- Invalid column reference.
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327381
Dmitry Kurbsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi159,

Сколько записей в таблице VatPayable?

Вместо summa,vat попробуй 6,7
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327455
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry KurbskyDelphi159,
Сколько записей в таблице VatPayable?

в таблице VatPayable только 1 запись- моя фирма является или нет ндс-плательщиком(VatPayable=0 or VatPayable=1).

Dmitry KurbskyDelphi159,

Вместо summa,vat попробуй 6,7
?

в Interbase 2009 где написано Price*18/118 ругается: expression evaluation not supported.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select Goods_Id, income_id, Qty, Price, vatpayer, Price*Qty as summa,

CASE when Vatpayer=1 then 
  case 
    when taxable=0 then 0
    when taxable=1 then Price*18/118
  end  
Else 0
END AS Vat
 
from Income, partn
where Income.part_id=partn.part_id
group by Goods_id, Income_id, Qty, Price, vatpayer, Summa,Vat
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327471
Dmitry Kurbsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Delphi159]в таблице VatPayable только 1 запись- моя фирма является или нет ндс-плательщиком(VatPayable=0 or VatPayable=1).

Код: sql
1.
2.
3.
from Income
  join partn on partn.part_id=Income.part_id
  join VatPayable on 1=1



?

Код: sql
1.
group by Goods_id, Income_id, Qty, Price, vatpayer, 6,7
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327500
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор Dmitry Kurbsky
Код: sql
1.
2.
3.
from Income
  join partn on partn.part_id=Income.part_id
  join VatPayable on 1=1



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select Goods_Id, income_id, Qty, Price, vatpayer, Price*Qty as summa,

CASE when Vatpayer=1 then 
  case 
    when taxable=0 then 0
    when taxable=1 then Price*18/118
  end  
Else 0
END AS Vat
 
from Income, partn
where Income.part_id=partn.part_id
group by Goods_id, Income_id, Qty, Price, vatpayer, Summa,Vat


Column unknown:summa,Vat

автор Dmitry Kurbsky
Код: sql
1.
group by Goods_id, Income_id, Qty, Price, vatpayer, 6,7


Token unknown - 6

А если так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select Goods_Id, income_id, Qty, Price, vatpayer, Price*Qty as summa,

CASE when Vatpayer=1 then 
  case 
    when taxable=0 then 0
    when taxable=1 then Price*18/118
  end  
Else 0
END AS Vat
 
from Income, partn
where Income.part_id=partn.part_id
group by Goods_id, Income_id, Qty, Price, vatpayer



А если без summa, vat тогда ругается на fsl2*18/118: expression evaluation not supported
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327502
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi159fsl2
Так это поле, небось, текстовое...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327514
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovDelphi159fsl2
Так это поле, небось, текстовое...


должен быть price*18/118
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327523
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Firebird 2.5 решил так и правильно работает:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select Goods_Id, income_id, Qty, Price, vatpayer, Price*Qty as summa,
CASE when vatpayable=1 then         --если моя фирма платит ндс
  CASE when Vatpayer=1 then          --если поставщик платит ндс 
  case 
    when taxable=0 then 0                    --если товар не платит ндс 
    when taxable=1 then Price*18/118         --если товар платит ндс
  end  
Else 0
  end
else 0
END AS Vat
 
from Income, partn
where Income.part_id=partn.part_id
group by Goods_id, Income_id, Qty, Price, vatpayer, summa, vatpayable



А в Interbase 2009-никак!
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327525
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
group by Goods_id, Income_id, Qty, Price, vatpayer, summa, vat
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327535
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi159,

в твоём случае проще выкинуть group by и решить задачу через distinct
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327541
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисDelphi159,

в твоём случае проще выкинуть group by и решить задачу через distinct

В Firebird-е этим ничего не меняется- одинаково работает и с group by и с distinct-ом,хотя сейчас обратил внимание что записи с одним Goods_id несколько(!) , а в Interbase 2009 всё тоже самое: expression evaluation not supported!
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327543
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327545
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi159,

а с чего решил что IB умеет группировку по выражению? Не пытайся сделать то что не работает. В Firebird язык SQL намного богаче, поэтому если хочешь чтобы работало сразу в обоих СУБД пиши запросы как можно проще.
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327553
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисDelphi159,

а с чего решил что IB умеет группировку по выражению? Не пытайся сделать то что не работает. В Firebird язык SQL намного богаче, поэтому если хочешь чтобы работало сразу в обоих СУБД пиши запросы как можно проще.

Симонов Денис как можно обойти проблему, чтобы работал и в IB 2009? Как посчитать ндс из бд кроме выражения? Не хочу создавать поле ндс-а в бд.
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327579
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не хочешь создавать поле - создай view.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327591
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovНе хочешь создавать поле - создай view.

Dimitry Sibiryakov ,как? что изменится если IB не умеет группировать по выражению?
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327592
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi159как можно обойти проблему, чтобы работал и в IB 2009?
у InterBase синтаксис SQL гораздо слабее, чем в Firebird. Так что "одним запросом" получится еще меньше, чем в FB.
В FB можно было бы и не одним запросом, в рамках Execute Block, которого в IB нет.

Я не знаю, зачем вам делать такую совместимость. Во времена IB 6 и FB 1 это еще можно было достаточно легко обеспечить. Нынче, делать совместимость с IB в ущерб возможностям FB - зачем? Впрочем, если исходить из наименьшего общего делителя, пишите запросы под ИБ, в ФБ они будут работать на 99% (если только это не "кривой" синтаксис, до сих пор поддерживаемый ИБ).
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327597
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvDelphi159как можно обойти проблему, чтобы работал и в IB 2009?

Я не знаю, зачем вам делать такую совместимость.
Просто пока бд на сервере IB 2009. Постепенно перехожу на Firebird 3
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327603
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi159что изменится если IB не умеет группировать по выражению?

"Не думай - делай!" (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327631
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Create view vVat As(a,b,c,d,e,f,g,h)
select Goods_Id, income_id, Qty, Price, vatpayer, Nakl.nakl_id, Price*Qty as summa,
CASE when vatpayable=1 then         --если моя фирма платит ндс
  CASE when Vatpayer=1 then          --если поставщик платит ндс 
  case 
    when taxable=0 then 0                    --если товар не платит ндс 
    when taxable=1 then Price*18/118         --если товар платит ндс
  end  
Else 0
  end
else 0
END AS Vat
 
from Income, partn, nakl
where Income.part_id=partn.part_id and nakl. nakl_id=:nakl_id
group by Goods_id, Income_id, Qty, Price, vatpayer, nakl_id, summa, vat



Error: expression evaluation not supported!
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327637
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Но если вместо выражения Price*18/118 напишуб например, цифру тогда уже view создаётся.
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327639
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi159Error: expression evaluation not supported!
да боже ж ты мой. какого типа у тебя Price? Должно быть что-то вроде numeric(18,2) или numeric(18,4). А у тебя небось это varchar.
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327640
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что, прямо так и создаёшь, с параметром и group by?.. Ню-ню...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327646
Delphi159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdvDelphi159Error: expression evaluation not supported!
да боже ж ты мой. какого типа у тебя Price? Должно быть что-то вроде numeric(18,2) или numeric(18,4). А у тебя небось это varchar.
Price имеет тип float.
Dimitry SibiryakovЧто, прямо так и создаёшь, с параметром и group by?.. Ню-ню...

извиняюсь, конечно без параметра и без group by:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Create view vVat As(a,b,c,d,e,f,g,h)
select Goods_Id, income_id, Qty, Price, vatpayer, Nakl.nakl_id, Price*Qty as summa,
CASE when vatpayable=1 then         --если моя фирма платит ндс
  CASE when Vatpayer=1 then          --если поставщик платит ндс 
  case 
    when taxable=0 then 0                    --если товар не платит ндс 
    when taxable=1 then 123 (вместо выражения Price*18/118)         --если товар платит ндс
  end  
Else 0
  end
else 0
END AS Vat
 
from Income, partn
where Income.part_id=partn.part_id 
...
Рейтинг: 0 / 0
помогите написать запрос на Firebird, Interbase 2009
    #39327653
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Delphi159Price имеет тип float.
святый боже. http://www.ibase.ru/round/

я попробовал воспроизвести вот так

Код: sql
1.
2.
3.
4.
5.
SELECT e.*,
CASE when salary > 0 then salary*18/118
else 0
  end  
from employee e


работает, но salary тут numeric(10,2). Если переписываем на
Код: sql
1.
cast(salary as float)*18/118


выдает то самое
expression evaluation not supported.

если обрамляем еще раз - работает.
Код: sql
1.
cast(cast(salary as float) as numeric(15,2)) *18/118



почему вдруг float нельзя перемножать, не понял. Попробовал обрамить весь case в cast, тоже не помогло.
При этом
Код: sql
1.
select salary*18/118 from employee


работает без проблем.

короче, пиши cast(Price as numeric(18,2))*18/118
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / помогите написать запрос на Firebird, Interbase 2009
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]