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

Откуда:
Сообщений: 41
Здравствуйте!
Предположим есть таблица table_start
id type
1 removable_disk
2 HDD
3 multiple_card_reader
4 removable_disk
5 NULL

Тогда запрос
insert into db.dbo.table_end
select id,type from table_start

Дает в table_end результат как и в table_start
Как можно сделать чтобы результат поля type можно было при необходимости преобразовывать,
чтобы на выходе иметь
1 Съемный диск
2 HDD
3 Карт-ридер
4 Съемный диск
5 NULL
9 апр 14, 12:36    [15855269]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL возможность подмены значения  [new]
Добрый Э - Эх
Guest
а в системе есть справочник соответствия англо-и русскоязычных наименований?
9 апр 14, 12:39    [15855287]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL возможность подмены значения  [new]
Добрый Э - Эх
Guest
как вариант - хардкоддинг в виде:
insert into db.dbo.table_end
select id, case type 
when 'removable_disk' then 'Съемный диск'
when 'multiple_card_reader' then 'Карт-ридер' 
else type end
from table_start
9 апр 14, 12:41    [15855310]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL возможность подмены значения  [new]
exw777
Member

Откуда:
Сообщений: 41
Добрый Э - Эх,

нет, но таких замен немного, штук 5, определенные фразы из этой пятерки -заменяем, остальные пропускаем какие есть
9 апр 14, 12:41    [15855312]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL возможность подмены значения  [new]
Добрый Э - Эх
Guest
exw777,

ну, если "штук пять", то CASE :)
9 апр 14, 12:43    [15855328]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL возможность подмены значения  [new]
exw777
Member

Откуда:
Сообщений: 41
Добрый Э - Эх,

Спасибо, все работает:))
9 апр 14, 12:47    [15855354]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL возможность подмены значения  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
А почему не перечислены поля таблицы в INSERTе?

Это, конечно, не преступление. Это хуже. Это ошибка! ©
9 апр 14, 12:48    [15855365]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL возможность подмены значения  [new]
exw777
Member

Откуда:
Сообщений: 41
iap, можно пример? Реальный запрос понаворотистее, но пока все работает
9 апр 14, 12:53    [15855390]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL возможность подмены значения  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
exw777
iap, можно пример? Реальный запрос понаворотистее, но пока все работает
Это пока поля в таблицах не удаляли/не вставляли.
Я не знаю, какие там поля в таблице db.dbo.table_end.
Но их надо перечислить через запятую в круглых скобках
в том порядке и в том количестве, которые соответствуюет порядку и количеству вставляемых значений.
9 апр 14, 12:57    [15855417]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL возможность подмены значения  [new]
exw777
Member

Откуда:
Сообщений: 41
iap, полный запрос

use snapshot
insert into changes.dbo.H_change_def

select resadd.* from 
(
select (select max(T_checktime.ch_t) from changes.dbo.T_checktime) ch_t,m_id,'Добавлено' ch_type,'Накопитель' hw_type,
'ID: '+cast(dsk_instance as varchar)+' | Тип: '+
case dsk_type
when 'Fixed hard disk media' then 'Жесткий диск (HDD)'
when 'Removable Media' then 'USB-Flash диск'
when 'External hard disk media' then 'Внешний диск (HDD)'
when 'Removable media other than floppy' then 'Внешний диск (HDD)'
else 'Кард-ридер/прочее' end
+' | Модель: '+dsk_model+' | Объем: '+cast(dsk_size as varchar)+' мегабайт' ch_value from snapshot.dbo.H_drive_upd
except
select (select max(T_checktime.ch_t) from changes.dbo.T_checktime),m_id,'Добавлено','Накопитель',
'ID: '+cast(dsk_instance as varchar)+' | Тип: '+
case dsk_type
when 'Fixed hard disk media' then 'Жесткий диск (HDD)'
when 'Removable Media' then 'USB-Flash диск'
when 'External hard disk media' then 'Внешний диск (HDD)'
when 'Removable media other than floppy' then 'Внешний диск (HDD)'
else 'Кард-ридер/прочее' end
+' | Модель: '+dsk_model+' | Объем: '+cast(dsk_size as varchar)+' мегабайт' ch_value from snapshot.dbo.H_drive
) as resadd

where exists (select *
from snapshot.dbo._machine_def as chkadd
where resadd.m_id = chkadd.m_id)

union

select resdel.* from 
(
select (select max(T_checktime.ch_t) from changes.dbo.T_checktime) ch_t,m_id,'Удалено' ch_type,'Накопитель' hw_type,
'ID: '+cast(dsk_instance as varchar)+' | Тип: '+
case dsk_type
when 'Fixed hard disk media' then 'Жесткий диск (HDD)'
when 'Removable Media' then 'USB-Flash диск'
when 'External hard disk media' then 'Внешний диск (HDD)'
when 'Removable media other than floppy' then 'Внешний диск (HDD)'
else 'Кард-ридер/прочее' end
+' | Модель: '+dsk_model+' | Объем: '+cast(dsk_size as varchar)+' мегабайт' ch_value from snapshot.dbo.H_drive
except
select (select max(T_checktime.ch_t) from changes.dbo.T_checktime),m_id,'Удалено','Накопитель',
'ID: '+cast(dsk_instance as varchar)+' | Тип: '+
case dsk_type
when 'Fixed hard disk media' then 'Жесткий диск (HDD)'
when 'Removable Media' then 'USB-Flash диск'
when 'External hard disk media' then 'Внешний диск (HDD)'
when 'Removable media other than floppy' then 'Внешний диск (HDD)'
else 'Кард-ридер/прочее' end
+' | Модель: '+dsk_model+' | Объем: '+cast(dsk_size as varchar)+' мегабайт' ch_value from snapshot.dbo.H_drive_upd
) as resdel

where exists 
(select * from snapshot.dbo._machine_def_upd as chkdel where resdel.m_id = chkdel.m_id)

order by m_id, ch_type desc

use master
go

рабочий, но длинный, много повторных моментов вообще имеет смысл его оптимизировать?
9 апр 14, 13:25    [15855650]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL возможность подмены значения  [new]
exw777
Member

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


К сообщению приложен файл. Размер - 113Kb
9 апр 14, 13:31    [15855699]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL возможность подмены значения  [new]
iap
Member

Откуда: Москва
Сообщений: 47052
exw777,

я только про список полей говорил. У Вас, кстати, его как не было, так и нет.
Рано или поздно нарвётесь. По этой причине это просто говнокод.

А детально сейчас разбираться с этим запросом у меня нет возможности. Извините.
9 апр 14, 13:33    [15855723]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL возможность подмены значения  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8350
Единственно корректное решение - не хардкодить названия, а создать справочник наименований.
9 апр 14, 14:37    [15856195]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в SQL возможность подмены значения  [new]
west74
Member

Откуда: Челябинск
Сообщений: 76
еще говорят о суровых Челябинских ....
даже у нас такого не делают !!!

не проще табличку подмен завести типа TranslateT


create table TranslateT
(
R_name varchar(200),
E_Name varchar(200)
)

Insert into TranslateT values
('Съемный диск','removable_disk'),('Карт-ридер','multiple_card_reader')

insert into db.dbo.table_end
select id,isnull(
(select R_name from TranslateT where E_name=type )
,type)
from table_start
9 апр 14, 14:57    [15856358]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить