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

Откуда:
Сообщений: 28
4. Есть таблица T1. У таблицы столбцы C1 datetime – уникальный, - содержит первые числа месяцев за год с 01/04/2008 по 01/03/2009. C2 – dec(9,2), C3 – dec(9,2), C4 – dec(9,2).

C1 апр.08 май.08 июн.08 июл.08 авг.08 сен.08 окт.08 ноя.08 дек.08 янв.09 фев.09 мар.09

C2 450 530 610 690 770 850 930 1 010 1 090 1 090 1 090 1 090

C3 400 4675 535 6025 670 7375 805 8725 940 940 940 940

C4 350 405 460 515 570 625 680 735 790 790 790 790


Есть таблица T2. C1 – datetime – содержит дату в пределах 01/04/2008 – 31/03/2009, С2 – dec(9,2).
C1 C2
03.04.2008 300
05.05.2008 200
10.05.2008 300
06.06.2008 100
12.06.2008 200
20.06.2008 400
07.07.2008 300
16.07.2008 300
15.08.2008 700
01.09.2008 400
10.09.2008 500
02.10.2008 300
15.10.2008 300
25.10.2008 300
07.11.2008 400
17.11.2008 400
15.12.2008 700
15.02.2009 800
05.03.2009 500
15.03.2009 500

Получить рекордсет: C1 – месяц/год, C2 – сумма всех записей из T2 за указанный месяц, С3 – коэффициент = 0, если сумма < T1.C2, или = 0.06, если сумма >=T1.C2 и < T1.C3, или = 0.12, если сумма >=T1.C3 и < T1.C4, или = 0.25, если сумма >=T1.C4
C1 C2 C3
(месяц) (сумма) (коэффициент)

Таблица как то криво вставилась прикрепил задание в ворде.

К сообщению приложен файл (Задания SQL.rtf - 76Kb) cкачать
23 авг 13, 17:11    [14748944]     Ответить | Цитировать Сообщить модератору
 Re: Помогите получить рекордсет  [new]
Гость333
Member

Откуда:
Сообщений: 3683
vurdalak,

Пытаетесь устроиться в компанию "Трайтек"?
23 авг 13, 17:21    [14748991]     Ответить | Цитировать Сообщить модератору
 Re: Помогите получить рекордсет  [new]
vurdalak
Member

Откуда:
Сообщений: 28
Гость333
vurdalak,

Пытаетесь устроиться в компанию "Трайтек"?

А это имеет значение? )))
23 авг 13, 17:25    [14749005]     Ответить | Цитировать Сообщить модератору
 Re: Помогите получить рекордсет  [new]
vurdalak
Member

Откуда:
Сообщений: 28
Просто на джава я неплохо программирую(без бд). А вот с sql у меня туго(((
23 авг 13, 17:27    [14749021]     Ответить | Цитировать Сообщить модератору
 Re: Помогите получить рекордсет  [new]
aleks2
Guest
Помницца в последнее резюме я тупо вставил ссылку на поиск себя на sql.ru... дык, оне меня даже не мучили на собеседовании.
23 авг 13, 18:57    [14749354]     Ответить | Цитировать Сообщить модератору
 Re: Помогите получить рекордсет  [new]
vurdalak
Member

Откуда:
Сообщений: 28
Может быть у вас опыт есть, поэтому никто не мучает?
Помогите пожалуйста, в интернете не могу найти ничего подобного.
Это стандартное задание. Может решите, чтобы люди больше эти вопросы не задавали.
Я по алгоритмам я уже все решил. Осталось вот этот sql и программа которая берет курс доллара к рублю и складывает в базу данных.
23 авг 13, 19:07    [14749389]     Ответить | Цитировать Сообщить модератору
 Re: Помогите получить рекордсет  [new]
aleks2
Guest
Это фсе равно тя не спасет.

;with
--Получить рекордсет: C1 – месяц/год, C2 – сумма всех записей из T2 за указанный месяц, 
rec0 as (select dateadd( month, DATEDIFF(MONTH, 0, C1 ), 0 ) as [C1]
              , SUM(C2)  as [C2]
           from T2
           group by  dateadd( month, DATEDIFF(MONTH, 0, C1 ), 0 )
         )
, -- С3 – коэффициент = 0, если сумма < T1.C2, или = 0.06, если сумма >=T1.C2 и < T1.C3, или = 0.12, если сумма >=T1.C3 и < T1.C4, или = 0.25, если сумма >=T1.C4
rec2 as (select r2.*, C3 = case 
                             when r0.C2 < T1.C2                    then 0 
                             when r0.C2 >= T1.C2 and r0.C2 < T1.C3 then 0.06
                             when r0.C2 >= T1.C3 and r0.C2 < T1.C4 then 0.12
                             when r0.C2 >= T1.C4                   then 0.25
                            end
           from rec0 as r0 left outer join T1 on r0.C1 = T1.C1
        )
select * from rec2;
                             
23 авг 13, 19:14    [14749404]     Ответить | Цитировать Сообщить модератору
 Re: Помогите получить рекордсет  [new]
vurdalak
Member

Откуда:
Сообщений: 28
Помогите мне еще вот в этом задании пожалуйста!))

Есть хранимая процедура usp_1 @p1 varchar, @p2 varchar out. Есть таблица T1(C1 – int – уникальный, C2, C3 – оба varchar). Написать запрос: для каждого непустого С2 вызвать хранимку, в качестве первого параметра передать С2, а затем в С3 записать значение второго параметра.
Я вот так вот написал:
SELECT FROM T1 WHERE id_product > 0 call usp_1 @p1 varchar(C2,C3)
Правильно?
23 авг 13, 20:48    [14749629]     Ответить | Цитировать Сообщить модератору
 Re: Помогите получить рекордсет  [new]
Glory
Member

Откуда:
Сообщений: 104751
vurdalak
Я вот так вот написал:
SELECT FROM T1 WHERE id_product > 0 call usp_1 @p1 varchar(C2,C3)
Правильно?

Нет
23 авг 13, 21:25    [14749721]     Ответить | Цитировать Сообщить модератору
 Re: Помогите получить рекордсет  [new]
vurdalak
Member

Откуда:
Сообщений: 28
Glory,
А как правильно? Помоги пожалуйста!)
23 авг 13, 23:00    [14750134]     Ответить | Цитировать Сообщить модератору
 Re: Помогите получить рекордсет  [new]
пияпец
Guest
DECLARE cur CURSOR FOR 

SELECT C1, С2 FROM T1 WHERE IsNull(С2 , '') != ''

OPEN cur

FETCH NEXT FROM cur
INTO @c1, @c2

WHILE @@FETCH_STATUS = 0
BEGIN
  exec usp_1 @c2, C3 output
update T1
set c3 = @c2
where c1 = @c1

    FETCH NEXT FROM cur
    INTO @c1, @c2
END 
CLOSE cur;
DEALLOCATE cur;



если я правильно постановку задачи понял, то как-то так
переменные только объявите @с1 и @с2
23 авг 13, 23:57    [14750310]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить