Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Нестандартный select (exec @sql ...)
|
|||
|---|---|---|---|
|
#18+
Уважаемые Господа. Имеются два вопроса create table Пример ( КодДвижения int identity (1, 1) not null primary key, КодОбъекта int , Количество decimal(19, 2) , Цена decimal(19, 2) , СтавкаНДС decimal(19, 2) , ТипСуммы varchar (50) , СуммаБНДС decimal(19, 2) , СуммаНДС decimal(19, 2) , СуммаСНДС decimal(19, 2) ) insert into Пример values ( 1 , 10 , 10 , 0.2 , 'СуммаБНДС*2' , 100.0 , 20.0 , 120.0 ) insert into Пример values ( 1 , 20 , 10 , 0.2 , 'СуммаНДС/2' , 200.0 , 40.0 , 240.0 ) insert into Пример values ( 1 , 30 , 10 , 0.2 , 'СуммаСНДС' , 300.0 , 60.0 , 360.0 ) Вопрос 1 Требуется получить : КодДвижения Результат 1 200 2 20 3 360 Получается только с помощью курсора и exec , а желательно получить набор данных для последующей выборки (т.е. не create proc , а create function или select from openrowset) Вопрос 2 Каким образом получить в select все поля таблицы в именах которых присутствует 'Сумма' К этому вопросу даже не знаю как подступиться . Заранее благодарен. P.S. Таблица "Пример" примером и является ( т.е. только для примера и создана ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2001, 20:56 |
|
||
|
Нестандартный select (exec @sql ...)
|
|||
|---|---|---|---|
|
#18+
IMHO 1. Если вы действительно хотите отказаться от курсора, то придется отказаться от хранения текста формулы как поля таблицы, потому что в SELECT нельзя реализовать макроподстановку Мой вариант такой \ncreate table #Пример ( КодДвижения int identity (1, 1) not null primary key, КодОбъекта int , Количество decimal(19, 2) , Цена decimal(19, 2) , СтавкаНДС decimal(19, 2) , ТипСуммы nvarchar (50) collate SQL_Latin1_General_CP1251_CI_AS, СуммаБНДС decimal(19, 2) , СуммаНДС decimal(19, 2) , СуммаСНДС decimal(19, 2), ТипФормулы int ) insert into #Пример values ( 1 , 10 , 10 , 0.2 , N'СуммаБНДС*2' , 100.0 , 20.0 , 120.0, 1 ) insert into #Пример values ( 1 , 20 , 10 , 0.2 , N'СуммаНДС/2' , 200.0 , 40.0 , 240.0, 2 ) insert into #Пример values ( 1 , 30 , 10 , 0.2 , N'СуммаСНДС' , 300.0 , 60.0 , 360.0, 3 ) select *, case ТипФормулы when 1 then СуммаБНДС*2 when 2 then СуммаНДС/2 when 3 then СуммаСНДС else null end from #Пример drop table #Пример Вместо CASE ... END можно использовать и функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2001, 08:15 |
|
||
|
Нестандартный select (exec @sql ...)
|
|||
|---|---|---|---|
|
#18+
2. DECLARE @mysql nvarchar(4000), @delimiter char SET @delimiter = ',' SELECT @mysql = COALESCE(@mysql + @delimiter, '') + COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = N'Пример' AND COLUMN_NAME LIKE N'%Сумма%' SET @mysql = N'SELECT ' + @mysql + N' FROM Пример' exec(@mysql) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2001, 08:23 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3526&tid=1824771]: |
0ms |
get settings: |
4ms |
get forum list: |
7ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
18ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
21ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 257ms |

| 0 / 0 |
