powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите пожалуйста составить запрос.
15 сообщений из 15, страница 1 из 1
Помогите пожалуйста составить запрос.
    #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
Помогите пожалуйста составить запрос.
    #32071805
Flint-San
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сделай три вычислиямых поля
...
Рейтинг: 0 / 0
Помогите пожалуйста составить запрос.
    #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
Помогите пожалуйста составить запрос.
    #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
Помогите пожалуйста составить запрос.
    #32071838
Студент2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Николай! Я просто не так Case использовал.
Я его написао один раз, а потом when, when Вот он у меня и выбиральодно условие, а так сделать недодумался....
СПАСИБО!!!
...
Рейтинг: 0 / 0
Помогите пожалуйста составить запрос.
    #32071846
Студент2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет. проглядел. Все равно не получается.
В этом примере, если а=15, то в другие условия по else он уже не выполнит, а мне нужно чтобы все три проверил.
А по поводу предложения jimmers, у меня слишком большой запрос, и так сделать будет наверное неудобно. Я здесь написал только пример. Запрос очень большой.
...
Рейтинг: 0 / 0
Помогите пожалуйста составить запрос.
    #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
Помогите пожалуйста составить запрос.
    #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
Помогите пожалуйста составить запрос.
    #32071873
Студент2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет запрос большой не от того, что много вариантов значений. Просто запутанный запрос. Ну ладно, попробую как предложил jimmers. Страшно только....
А может все-таки есть путь по-легче?
...
Рейтинг: 0 / 0
Помогите пожалуйста составить запрос.
    #32071877
Студент2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да,PeterSV наверное это достаточно... А это ничего, что так много условий? Каких-нибудь отрицательных последсвий не будет?
...
Рейтинг: 0 / 0
Помогите пожалуйста составить запрос.
    #32071881
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты привел-бы весь запрос с условиями - может и найдется полегче!
А то получается:
- Мне нужен автомобиль с зеркалом заднего вида!
- Вот запорожец!
- Да не, мне что-б ездил быстро!
- Тогда BMW
- А мне по бездорожью!
- Pajero возьмите!
- И что-б с комфортом...

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


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