Банальное исключение
127 / 95 / 12
Регистрация: 31.03.2010
Сообщений: 314
Записей в блоге: 1
1

Transact-SQL (IF ELSE)

05.02.2012, 12:37. Показов 5446. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую. Есть запрос, который выводит информацию о заказах (Тема: Таскопарк). Мне нужно, чтобы он проверял, яляется ли клиент VIP'ом, и если да, то уменьшал цену поездки вдвое.
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Create PROCEDURE [dbo].[GetOrderInfo]
AS
SELECT 
    OrderCost.OrderType,
    OrderCost.Cost,
    Model AS Marka_avtomobilya,
    Type AS Tip_avtomobilya,
    LengthRun+' km' AS Dlina_Puti,
    Cena=([Order].LengthRun*OrderCost.Cost),
    Manager.Family+' '+LEFT(Manager.Name,1)+'.'+LEFT(Manager.FatherName,1)+'.' AS Oformil,
    Client.ForName+' '+LEFT(Client.Name,1)+'.'+LEFT(Client.FatherName,1)+'.' AS Client,
    Client.VIP,
    ExecOrder
FROM [Order],Manager,Auto,Client,OrderCost
WHERE
[Order].ManagerID=Manager.ManagerID AND
[Order].AutoID=Auto.AutoID AND
[Order].OrderCostID=OrderCost.OrderCostID AND
[Order].ClientID=Client.ClientID
Не понимаю как с IF работать и в последствие занести полученные данные в столбец.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.02.2012, 12:37
Ответы с готовыми решениями:

@ в transact-sql
Для чего используется @ в Transact-SQL?

вопрос по transact sql
можно ли при выборке селектом на месте перечисления необходимых столбцов указывать подзапросы? и...

Подскажите по Transact-SQL
Подскажите пожалуйста! Задача:Найти подразделение в котором работал "Имя сотрудника" такого то...

Запрос в transact-sql
Здравствуйте! Допустим есть таблица со столбцами "Имя", "Пункт" и "Значение". Как вывести все...

8
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,793
05.02.2012, 13:49 2
Лучше всего
T-SQL
1
2
3
4
create trigger if_vip on [dbo].[order]
after insert
as
.....
http://msdn.microsoft.com/ru-r... 89799.aspx
1
Банальное исключение
127 / 95 / 12
Регистрация: 31.03.2010
Сообщений: 314
Записей в блоге: 1
05.02.2012, 14:19  [ТС] 3
pincet
T-SQL
1
2
3
4
5
6
7
8
CREATE TRIGGER if_vip ON [Order]
AFTER INSERT,UPDATE
AS
IF 'Что тут написать?'
BEGIN
INSERT INTO OrderCost (Cost)
VALUES ('И что написать здесь, чтобы значение было Cost/2')
END
0
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,793
05.02.2012, 14:23 4
потерпи 5 сек - щас некогда ответить - чуть пожже
0
Банальное исключение
127 / 95 / 12
Регистрация: 31.03.2010
Сообщений: 314
Записей в блоге: 1
05.02.2012, 14:25  [ТС] 5
Поясню немного:
Мне нужно, чтоб для вип-клиентов была 50% скидка на поездку.
Поле VIP (VARCHAR(5): 'Да' или 'Нет')

Добавлено через 33 секунды
В OrderCost есть ClientID
0
1643 / 1144 / 171
Регистрация: 23.07.2010
Сообщений: 6,793
05.02.2012, 15:59 6
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
-- use MyDataBase - здесь указываем имя ДБ
GO -- необходимо для CREATE TRIGGER
CREATE TRIGGER if_vip  ON  Table_1 -- Вместо Table_1 - везде имя свое талбицы
   AFTER  INSERT
AS 
BEGIN
declare @rcnt int
set @rcnt=@@ROWCOUNT
if @rcnt=0 return -- ограничения целостности могут не вставить ничего
if @rcnt>1 -- версия для обновления только одной записи
    begin
        rollback
        return
    end
if (select [name] from inserted)='VIP' -- вместо 'VIP' - что угодно
begin
    update Table_1 set Table_1.cost=inserted.cost/2 -- здесь манипулируем значением
        from inserted where Table_1.id=inserted.id
 
end
SET NOCOUNT ON; -- как правило, триггеры не возвращают значений
 
END
GO
Добавлено через 4 минуты
Я бы еще с INSTEAD OF INSERT побаловался - думаю, это более айс.

Добавлено через 10 минут
Цитата Сообщение от WorldException Посмотреть сообщение
Приветствую. Есть запрос, который выводит информацию о заказах (Тема: Таскопарк). Мне нужно, чтобы он проверял, яляется ли клиент VIP'ом, и если да, то уменьшал цену поездки вдвое.
Если нужно только в отчете - то можно так
T-SQL
1
2
3
4
5
6
7
8
use MyDb
go
select * ,
    case when [name]='VIP' then cost/2
        else cost
    end as cost
from Table_1
go
2
Банальное исключение
127 / 95 / 12
Регистрация: 31.03.2010
Сообщений: 314
Записей в блоге: 1
06.02.2012, 08:01  [ТС] 7
pincet, благодарю.
0
nio
10.02.2012, 21:48
  #8

Не по теме:

Цитата Сообщение от WorldException Посмотреть сообщение
Поле VIP (VARCHAR(5): 'Да' или 'Нет')
Да - 2 буквы
Нет - 3 буквы
Почему тогда VIP VARCHAR(5)?
И почему не используется тип бит?

1
Банальное исключение
127 / 95 / 12
Регистрация: 31.03.2010
Сообщений: 314
Записей в блоге: 1
13.02.2012, 07:15  [ТС] 9
nio, Всё делалось "на скорую руку" и о таких подробностях не задумывался. Спасибо за заметку, учту.
0
13.02.2012, 07:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.02.2012, 07:15
Помогаю со студенческими работами здесь

SQL Server Transact-SQL
Задача Вывести имена поставщиков , для которых в таблице Заказ содержится не менее 5 строк. При...

Transact SQL. Хранимые процедуры
Есть БД - Dar, в ней 5 таблиц - dbo.City, dbo.Customer, dbo.OrdItem, dbo.Product, dbo.Order В...

Программирование на языке Transact-SQL
Есть хранимая процедура которая решает задачу определения наименования товара, по которому был...

Создать запрос на Transact-SQL
Есть вот такой запрос и после его выполнения получается такая таблица, далее нужно как-то сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru