Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите пожалуйста составить запрос. / 15 сообщений из 15, страница 1 из 1
25.11.2002, 10:54:03
    #32071801
Студент2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
Мне нужно составить запрос следующего типа.
Конечно синтаксис не такой, я пишу, просто чтобы было понятно
Select a,b,c,cot =
begin
if a= 15 then cot*2
if b=5 then cot*5
id c="w" then cot / 5
end
Пытался воспользоваться Case не получается, т.к. он выполняет только одно условие. А мне нужно, чтобы если все три условия верны, то Cot пересчиьтывался бы согласно этим условиям.
Помогите пожалуйста.
...
Рейтинг: 0 / 0
25.11.2002, 10:57:44
    #32071805
Flint-San
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
сделай три вычислиямых поля
...
Рейтинг: 0 / 0
25.11.2002, 11:08:14
    #32071812
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
Если у Вас SQL 2000, то можно использовать UDF.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE FUNCTION dbo.fn_get_cot(@a int, @b int, @c char( 1 ), @cot int)
RETURNS int
AS
begin
  if @a =  15  set @cot = @cot* 2  
  if @b = 5  set @cot = @cot* 5  
  if @c = 'w' set @cot = @cot/ 5 
  return @cot
end
GO

DECLARE @t table (a int,b int,c char( 1 ),[cot] int)

INSERT @t VALUES( 15 , 5 ,'w', 7 )

SELECT a, b, c, 
       [cot] = dbo.fn_get_cot(a,b,c, [cot])
  FROM @t

DROP FUNCTION dbo.fn_get_cot
GO
...
Рейтинг: 0 / 0
25.11.2002, 11:39:36
    #32071835
Nickolay
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
Зря ты так на Case - работает он...
Код: plaintext
1.
2.
3.
4.
5.
SELECT a,b,c,cot = 
CASE a WHEN  15  THEN cot* 2  ELSE
CASE B WHEN  5  THEN cot* 5  ELSE
CASE C 'w' THEN cot /  5  
ELSE Null
END END END
...
Рейтинг: 0 / 0
25.11.2002, 11:45:17
    #32071838
Студент2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
Спасибо, Николай! Я просто не так Case использовал.
Я его написао один раз, а потом when, when Вот он у меня и выбиральодно условие, а так сделать недодумался....
СПАСИБО!!!
...
Рейтинг: 0 / 0
25.11.2002, 11:55:00
    #32071846
Студент2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
Нет. проглядел. Все равно не получается.
В этом примере, если а=15, то в другие условия по else он уже не выполнит, а мне нужно чтобы все три проверил.
А по поводу предложения jimmers, у меня слишком большой запрос, и так сделать будет наверное неудобно. Я здесь написал только пример. Запрос очень большой.
...
Рейтинг: 0 / 0
25.11.2002, 12:15:52
    #32071864
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
Я так понимаю у тебя запрос большой получается, потому что значений много которые могут принимать a b c. Так создай таблицу, загони туда Поля
Код: plaintext
1.
2.
3.
4.
5.
6.
| VAR | VALUE | MULT_FACT |
|  a  |    15   |        2    |
|  a  |    10   |      1 . 5    |
|  b  |     5   |        5    |
|  b  |     3   |        3    |
|  c  |    w  |      . 2    |
|  c  |    f  |      . 4   |


делай join этой таблицы и выбирай необходимый коэффициент!
...
Рейтинг: 0 / 0
25.11.2002, 12:23:34
    #32071871
PeterSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
Я не понимаю, чем не подходит CASE? Он выполняет все условия записанные в нем по очереди до первого ИСТИНА. Все что остается, это логически правильно записать эти условия:
SELECT [a], , [c], [cot] =
CASE
WHEN a=15 and b=5 and c="w" THEN cot = ...
WHEN b=5 and c="w" THEN cot = ...
WHEN a=15 and b=5 THEN cot = ...
WHEN a=15 and c="w" THEN cot = ...
WHEN a=15 THEN cot = ...
WHEN b=5 THEN cot = ...
WHEN c="w" THEN cot = ...
END

Разве этого не достаточно?
...
Рейтинг: 0 / 0
25.11.2002, 12:25:22
    #32071873
Студент2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
Нет запрос большой не от того, что много вариантов значений. Просто запутанный запрос. Ну ладно, попробую как предложил jimmers. Страшно только....
А может все-таки есть путь по-легче?
...
Рейтинг: 0 / 0
25.11.2002, 12:27:31
    #32071877
Студент2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
Да,PeterSV наверное это достаточно... А это ничего, что так много условий? Каких-нибудь отрицательных последсвий не будет?
...
Рейтинг: 0 / 0
25.11.2002, 12:29:33
    #32071881
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
А ты привел-бы весь запрос с условиями - может и найдется полегче!
А то получается:
- Мне нужен автомобиль с зеркалом заднего вида!
- Вот запорожец!
- Да не, мне что-б ездил быстро!
- Тогда BMW
- А мне по бездорожью!
- Pajero возьмите!
- И что-б с комфортом...

Сразу задачку опиши всю! :)
...
Рейтинг: 0 / 0
25.11.2002, 12:38:47
    #32071889
KEN
KEN
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
Это выдержка из Help для SQL2000. По моему очень похоже. Если нет, то смотри Help по Case. Там есть примеры.
USE pubs
GO
SELECT 'Price Category' =
CASE
WHEN price IS NULL THEN 'Not yet priced'
WHEN price < 10 THEN 'Very Reasonable Title'
WHEN price >= 10 and price < 20 THEN 'Coffee Table Title'
ELSE 'Expensive book!'
END,
CAST(title AS varchar(20)) AS 'Shortened Title'
FROM titles
ORDER BY price
GO
...
Рейтинг: 0 / 0
25.11.2002, 12:46:50
    #32071901
Студент2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
Я конечно могу написать.... Неудобно как-то...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Select Price = CASE 
WHEN Currency <> 'руб' THEN  Price *  31 . 68   
WHEN AVT <> Параметр THEN  
        Case Параметр 
                WHEN   1  THEN Price* 1 . 2  
                ELSE Price/ 1 . 2  
        end 
WHEN Plant.Package <>  1  THEN 
        Case Пар2 
                WHEN   1  THEN 
                           Case Mark.Package 
                                When  1  Then Price* 1 . 03  
                                Else Price 
                            end 
                ELSE  
                         Case Mark.Package 
                          When  1  Then Price/ 1 . 03 
                          Else Price 
                         end  
           end 
ELSE Price 
END,Другие поля From таблицы Where ...

Как видно, получается очень много условий...
...
Рейтинг: 0 / 0
25.11.2002, 12:50:56
    #32071906
mahoune
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
Дело в том, что в этих вычислениях нет никакой общей логики! Порядок совершенно непредсказуемый! По этой причине надо либо функцию/процедуру ваять! Либо запрос большой писать!
...
Рейтинг: 0 / 0
25.11.2002, 12:52:44
    #32071909
Студент2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите пожалуйста составить запрос.
Спасибо за советы. Попробую.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите пожалуйста составить запрос. / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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