SQL запросы к таблице автоучёта модуля УЗ

Автор Сообщение
Serj
Заслуженный форумщик

Зарегистрирован: 15.12.2006
Сообщения: 90
Откуда: Санкт-Петербург

Добавлено: 12.09.2008 09:02 Заголовок сообщения: SQL запросы к таблице автоучёта модуля УЗ

aav писал(а):
…А заодно, поделюсь маленьким фрагментом, переработанным мной для своих нужд (заготовка для будущей процедуры, может кому-то пригодится):

Код:
/*
Базируется на идее Сергея Болдарева
*/
declare @AccountingCode int, @CC nvarchar(2), @TrYear nvarchar(2), @sql nvarchar(4000)
set @AccountingCode=0
set @CC=’01’
set @TrYear=’08’

declare @AAS TABLE (
   AccountingCode int,
   StockReceived varchar(12),
   AccruedReceived varchar(12),
   AccruedCosts varchar(12),
   StockIssued nvarchar(12),
   AccruedIssued nvarchar(12),
   StockTakingShortage varchar(12),
   StockTakingSurplus varchar(12),
   PurchaseDifference varchar(12),
   PurchaseCosts varchar(12),
   Revaluation varchar(12),
   IntermediateAccount varchar (12)
)
while @AccountingCode<=40
BEGIN
set @sql=’select ‘+
convert(nvarchar(2),@AccountingCode)+’ as AccountingCode,
isnull((select SC24003 from SC24’+@CC+’00 where SC24003<>»» and SC24001=»’+@TrYear+»’ and convert(int,SC24002)=’+convert(nvarchar,@AccountingCode*9+1)+’),»(’+convert(nvarchar,@AccountingCode*9+1)+’)») as StockReceived,
isnull((select SC24003 from SC24’+@CC+’00 where SC24003<>»» and SC24001=»’+@TrYear+»’ and convert(int,SC24002)=’+convert(nvarchar,@AccountingCode*9+2)+’),»(’+convert(nvarchar,@AccountingCode*9+2)+’)») as AccruedReceived,
isnull((select SC24003 from SC24’+@CC+’00 where SC24003<>»» and SC24001=»’+@TrYear+»’ and convert(int,SC24002)=’+convert(nvarchar,@AccountingCode*9+3)+’),»(’+convert(nvarchar,@AccountingCode*9+3)+’)») as AccruedCosts,
isnull((select SC24003 from SC24’+@CC+’00 where SC24003<>»» and SC24001=»’+@TrYear+»’ and convert(int,SC24002)=’+convert(nvarchar,@AccountingCode*9+4)+’),»(’+convert(nvarchar,@AccountingCode*9+4)+’)») as StockIssued,
isnull((select SC24003 from SC24’+@CC+’00 where SC24003<>»» and SC24001=»’+@TrYear+»’ and convert(int,SC24002)=’+convert(nvarchar,@AccountingCode*9+5)+’),»(’+convert(nvarchar,@AccountingCode*9+5)+’)») as AccruedIssued,
isnull((select SC24003 from SC24’+@CC+’00 where SC24003<>»» and SC24001=»’+@TrYear+»’ and convert(int,SC24002)=’+convert(nvarchar,@AccountingCode*9+6)+’),»(’+convert(nvarchar,@AccountingCode*9+6)+’)») as StockTakingShortage,
isnull((select SC24003 from SC24’+@CC+’00 where SC24003<>»» and SC24001=»’+@TrYear+»’ and convert(int,SC24002)=’+convert(nvarchar,@AccountingCode+371)+’),»(’+convert(nvarchar,@AccountingCode+371)+’)») as StockTakingSurplus,
isnull((select SC24003 from SC24’+@CC+’00 where SC24003<>»» and SC24001=»’+@TrYear+»’ and convert(int,SC24002)=’+convert(nvarchar,@AccountingCode*9+7)+’),»(’+convert(nvarchar,@AccountingCode*9+7)+’)») as PurchaseDifference,
isnull((select SC24003 from SC24’+@CC+’00 where SC24003<>»» and SC24001=»’+@TrYear+»’ and convert(int,SC24002)=’+convert(nvarchar,@AccountingCode*9+8)+’),»(’+convert(nvarchar,@AccountingCode*9+8)+’)») as PurchaseCosts,
isnull((select SC24003 from SC24’+@CC+’00 where SC24003<>»» and SC24001=»’+@TrYear+»’ and convert(int,SC24002)=’+convert(nvarchar,@AccountingCode*9+9)+’),»(’+convert(nvarchar,@AccountingCode*9+9)+’)») as Revaluation,
isnull((select SC24003 from SC24’+@CC+’00 where SC24003<>»» and SC24001=»’+@TrYear+»’ and convert(int,SC24002)=370),»(370)») as IntermediateAccount’
insert into @AAS
exec(@sql)
set @AccountingCode=@AccountingCode+1
END
select * from @AAS

Удобно.
Только не захотел вставлять EXEC-ом результаты в переменную с ошибкой:

Цитата:
EXECUTE cannot be used as a source when inserting into a table variable.


Получилось только во временную таблицу.

DenZ
Почетный форумщик

Зарегистрирован: 02.08.2007
Сообщения: 30
Откуда: BSH

Добавлено: 15.09.2008 09:42 Заголовок сообщения:
Я пользуюсь кодом попроще

Код:
SELECT ACC=case SC24003 when » then ‘(’+cast(cast(SC24002 as int) as varchar(3))+’)’ else SC24003 end
,S=case when SC24002<‘370’ then (cast(SC24002 as int)-1)/9 else (cast(SC24002 as int)-371) end
,q=case when SC24002<‘370′ then ((cast(SC24002 as int)-1)%9)+1 else 10 end
FROM SC240100
WHERE SC24002<>’370′ AND SC24001=’08’
ORDER BY S,q


где S — номер схемы, q — номер "действия" (приход,уход и тд).
Может кому сгодится Smile