Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите плиз с запросом  [new]
aidynchik
Member

Откуда:
Сообщений: 533
У меня есть 3 таблицы: "контракты", "способ расчетов контракта", и "способы расчетов".
То есть оформляется контракт. ему присваивается определенный способ расчета, связь между контрактом и способом расчета лежит в табличке "способ расчетов контракта", а в табличке "способы расчетов" просто список всех доступных способов расчета. Теперь мне необходимо вывести список всех доступных способов расчета, но пометить галочкой тот способ, который есть у данного контракта. Я это сделал таким способом (выделил единичкой,имеющийся у контракта способ расчетов):
SELECT decode(t1.Payment_Form, t2.Payment_Form, 1, 0) as EXIST,
       t2.Code,
       t2.short_name
FROM 
  (select
      pf.payment_form
    from
      CUST.Payment_Form pf,
      cust.contract     c,
      cust.contract_payment_form cpf
    where pf.is_active = 1
    and   cpf.payment_form = pf.payment_form
    and   c.contract = cpf.contract
    and   c.contract = 79623) t1,  -- ID конкретного контракта
  (select
      Payment_Form,  -- ID способа расчетов
      Code,          -- КОД
      Code || ' ' || Short_Name AS Short_Name  -- код и наименование
    from
      CUST.Payment_Form pf
    where pf.is_active = 1) t2
результат такой, который мне нужен:
Картинка с другого сайта.
то есть в данный момент у контракта способ расчетов с кодом 14.

но что делать, если у контракта несколько способов расчета? возможно ли такой запрос написать?
21 авг 09, 08:51    [7564701]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Форумом не промахнулись?! Это не T-SQL!
21 авг 09, 08:55    [7564714]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
приведи данные и примеры что есть что нужно получить....

автор
SELECT decode(t1.Payment_Form, t2.Payment_Form, 1, 0) as EXIST,
t2.Code,
t2.short_name
FROM
(select
pf.payment_form
from
CUST.Payment_Form pf,
cust.contract c,
cust.contract_payment_form cpf
where pf.is_active = 1
and cpf.payment_form = pf.payment_form
and c.contract = cpf.contract
and c.contract = 79623) t1, -- ID конкретного контракта
(select
Payment_Form, -- ID способа расчетов
Code, -- КОД
Code || ' ' || Short_Name AS Short_Name -- код и наименование
from
CUST.Payment_Form pf
where pf.is_active = 1) t2

и ешё запрос мне не нравится можно более граматно написать....
21 авг 09, 09:04    [7564734]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом  [new]
aidynchik
Member

Откуда:
Сообщений: 533
Ramin
приведи данные и примеры что есть что нужно получить....
и ешё запрос мне не нравится можно более граматно написать....

подскажи как грамотнее?
имеется:
таблица CONTRACT, структура:
CONTRACT, -- ID контракта (ключевое поле)
CONTRACT_NUMBER -- номер контракта (текстовое поле)

таблица PAYMENT_FORM (справочник способов расчетов), структура:
PAYMENT_FORM, -- ID способа расчетов
CODE, -- КОД
SHORT_NAME, -- краткое наименование
IS_ACTIVE -- признак активности

таблица CONTRACT_PAYMENT_FORM (обеспечивающая связь между контрактами и способами расчетов), структура:
CONTRACT_PAYMENT_FORM, -- ID
CONTRACT, -- ID контракта
PAYMENT_FORM -- ID способа расчета

данные таблицы PAYMENT_FORM:
Картинка с другого сайта.

в таблице CONTRACT такие данные:

|CONTRACT | CONTRACT_NUMBER |
---------------------------------
| 79623 | ТОО АМАНАТ |

у данного контракта способ расчетов с кодом 14, ID данного способа расчетов 4, в таблице CONTRACT_PAYMENT_FORM следующие данные:

| CONTRACT_PAYMENT_FORM | CONTRACT | PAYMENT_FORM |
-----------------------------------------------------------
| 1 | 79623 | 4 |


так вот мне нужно вывести список всех расчетов, а способы расчета к примеру по контракту с ID=79623 пометить единичками. В дальнейшем мне это нужно в курсор еще запихать и передать в Дельфи.
С одним способом расчета я реализовал, чуть выше... а что делать если у него 2-3 способа расчета? То есть в табличке CONTRACT_PAYMENT_FORM будет сидеть 2-3 записи?
21 авг 09, 09:35    [7564830]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
автор
а что делать если у него 2-3 способа расчета?

ну это ты должен сказать а мы попытаемся помоч тебе, откуда нам знать твою тех задачу???!
21 авг 09, 10:05    [7564964]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
а поповоду

автор
так вот мне нужно вывести список всех расчетов, а способы расчета к примеру по контракту с ID=79623 пометить единичками.


select t1.*, t2.CONTRACT_NUMBER, t3.CODE, t3.SHORT_NAME, t3.IS_ACTIVE 
from CONTRACT_PAYMENT_FORM t1
inner join CONTRACT  t2
on t1.CONTRACT  = t2.ID
inner join PAYMENT_FORM t3
on t1.PAYMENT_FORM = t3.id
21 авг 09, 10:09    [7564980]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом  [new]
aidynchik
Member

Откуда:
Сообщений: 533
Ramin

ну это ты должен сказать а мы попытаемся помоч тебе, откуда нам знать твою тех задачу???!


:) ну я же говорю - у контракта 3 способа расчета, то есть
в таблице CONTRACT такие данные:

 |CONTRACT | CONTRACT_NUMBER |
---------------------------------
| 79623 | ТОО АМАНАТ |

у данного контракта 3 способа расчетов с кодом 14 (ID=4), 13 (ID=2), 29 (ID=5), в таблице CONTRACT_PAYMENT_FORM следующие данные:

 |  CONTRACT_PAYMENT_FORM  |  CONTRACT | PAYMENT_FORM |
-----------------------------------------------------------
| 1 | 79623 | 4 |
-----------------------------------------------------------
| 2 | 79623 | 2 |
-----------------------------------------------------------
| 3 | 79623 | 5 |

мне надо вывести список всех способов расчета, а те которые е сть у контракта пометить единичками
21 авг 09, 11:53    [7565863]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом  [new]
aidynchik
Member

Откуда:
Сообщений: 533
Ramin
а поповоду

автор
так вот мне нужно вывести список всех расчетов, а способы расчета к примеру по контракту с ID=79623 пометить единичками.


select t1.*, t2.CONTRACT_NUMBER, t3.CODE, t3.SHORT_NAME, t3.IS_ACTIVE 
from CONTRACT_PAYMENT_FORM t1
inner join CONTRACT  t2
on t1.CONTRACT  = t2.ID
inner join PAYMENT_FORM t3
on t1.PAYMENT_FORM = t3.id


а t2 t3 что за таблицы извиняюсь спросить?
t3 - я так понял Payment_Form, а что за t2?
21 авг 09, 11:56    [7565887]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
aidynchik

мне надо вывести список всех способов расчета,


CROSS JOIN

aidynchik

мне надо вывести список всех способов расчета,

CASE ... WHEN ... THEN ... END

Сообщение было отредактировано: 21 авг 09, 11:57
21 авг 09, 11:57    [7565894]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом  [new]
aidynchik
Member

Откуда:
Сообщений: 533
aidynchik

а t2 t3 что за таблицы извиняюсь спросить?
t3 - я так понял Payment_Form, а что за t2?

ааа, я не увидел... доперло, щас попробую
21 авг 09, 11:58    [7565898]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
aidynchik
Ramin
а поповоду

автор
так вот мне нужно вывести список всех расчетов, а способы расчета к примеру по контракту с ID=79623 пометить единичками.


select t1.*, t2.CONTRACT_NUMBER, t3.CODE, t3.SHORT_NAME, t3.IS_ACTIVE 
from CONTRACT_PAYMENT_FORM t1
inner join CONTRACT  t2
on t1.CONTRACT  = t2.ID
inner join PAYMENT_FORM t3
on t1.PAYMENT_FORM = t3.id


а t2 t3 что за таблицы извиняюсь спросить?
t3 - я так понял Payment_Form, а что за t2?


алиазы...
21 авг 09, 12:29    [7566126]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом  [new]
Горилла с Нижнего Тагила
Member

Откуда:
Сообщений: 407
aidynchik

decode ...
Code || ' ' || Short_Name


Это похоже на Оракл
21 авг 09, 13:09    [7566470]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
это и есть оракл и даже можно предположить , что это опенвей-система
21 авг 09, 13:13    [7566497]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плиз с запросом  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
мдааа :)
конканитизация "||" из оракла
21 авг 09, 13:29    [7566615]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить