Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all 7251 articles
Browse latest View live

Изменение структуры

$
0
0
Есть таблица документа.
В случаях меньше чем 0.1% доков, требуются дополнительные поля. Numeric(6,2)
Что лучше, дополнить эту таблицу этими полями, либо сделать еще одну. Соединение 1:1

SQL REPLACE

$
0
0
Здавствуйте , помогите пожалуйста, в строке
SET @STRING = 'SELECT @passportNumber_Bank_link_persons = passport_number, @socialNumber_Bank_link_persons = social_number, @codeOfTax_Bank_link_persons = code_of_tax FROM Tbl_Bank_link_persons WHERE (REPLACE(passport_number  +, ' ', '') = ' + REPLACE(@passportNumber, ' ', '') +  ' ' + @str1 + ' ) AND closing_date IS NULL'


SSMS выдает ошибку- Incorrect syntax near ',') = '.

Помогите разобраться с ошибкой AppDomain is marked for unload due to memory pressure.

$
0
0
Добрый день.


На сервере стоит 2012 SQL Server x64


Памяти 16 Гб, из них доступно около 5 Гб.


При этом постоянно в логе ошибок сообщения:

AppDomain 24 (proddb.dbo[runtime].23) is marked for unload due to memory pressure.
AppDomain 24 (proddb.dbo[runtime].23) unloaded.
AppDomain 26 (proddb.dbo[runtime].25) created.




Помогите разобраться что они значат.

И как сделать чтобы ошибок не было.

Перенос файлов c FTP на сервер

$
0
0
Добрый день!
Подскажите код переноса файлов с сервера FTP на сервер sql

Правильная ли привязка полей?

$
0
0
Добрый день! Правильная ли привязка полей?
Помогите мне (доделать её)

БД жд вокзал

Картинка с другого сайта.

Картинка с другого сайта.

Разделить в строке значение, которые через запятые и сделать по ним поиск в других таблица

$
0
0
Добрый вечер, нужна ваша помощь по запросу.

Есть таблица
CREATE TABLE testtable(
    id INT NOT NULL IDENTITY PRIMARY KEY , /*ID*/
    groups      TEXT NOT NULL, /*ID групп работавших в данном проекте*/
    project_id INT UNIQUE NOT NULL, /*ID проекта*/
    );

Пример таблицы testtable
Картинка с другого сайта.

В каждой группе имена людей которые работали над проектом.
Мне нужно вывевсти все имена людей работавших над проектом например: 5

Как правильно распарсить значение в столбце groups и сделать по ним поиск??

Как вытянуть людей из групп я то понимаю,
SELECT name,group_id FROM users WHERE group_id= '32'

а вот как со всех этих групп вытянуть одним запросом?

Очень нужна ваша помощь, уже второй день сижу и не могу разобраться)

Cannot resolve the collation conflict between Cyrillic_General_CI_AS and SQL_Latin1_Gen

$
0
0
ms sql server 2017
ms server 2012
asp.net core 2

Проверяю свойсва БД, по умолчанию сортировка указана Cyrillic_General_CI_AS

Экземпляр сервера тоже указано Cyrillic_General_CI_AS

ПРи запросе процедуры из c#:

res = db.Query<SearchPictureInfoOutputModel>("sp_SearchPictureInfo", new { Prc_ID = input.Prc_ID, Cust_ID = input.Cust_ID, AppCode = input.AppCode},
                             commandType: CommandType.StoredProcedure).FirstOrDefault();


выдает ошибку Cannot resolve the collation conflict between “Cyrillic_General_CI_AS” and “SQL_Latin1_General_CP1_CI_AS

Не понимаю откуда берется настройка SQL_Latin1_General_CP1_CI_AS? И как изменить на Cyrillic_General_CI_AS?

Заранее спасибо за ответ.

А что если прервать реорганизацию индекса?

$
0
0
Добрый день,


А что если прервать реорганизацию индекса а потом продолжить, например на следующий день из другого подключения?


То что "реорганизовалось" до прерывания оно заново будет реорганизовыватся или уже пропустится и будет реорганизовываться дальше?


Т.е. если ли накопительный эффект при прерывании?

Гуру оптимизации, где вы?

$
0
0
Друзья, коллеги по платформе, братья по-разуму.. услышьте мой зов о помощи! Сил больше нет бороться с SSMS, крыша едет! Не понимаю что это и как?
Куда делись 25 секунд? причем это одно из самых худших выполнений, обычно секунд 50, но и в нем тоже самое - 25 секунд на что потрачены, куда?

плавающее окно

$
0
0
господа что то пятничная мысль в голову не идет, есть идеи как реализовать без цикла/курсора?

act = 6 вход в состояние
act = 5 откат состояния

на state как таковой завязываться нельзя это текстовое поле с кучей информации, я привел сокращение данных в нем для ясности.

declare @t table ([id] int identity, act int, [date] datetime, [state] varchar(255))

insert into @t values 
(6, '20180110 08:00:00', 'введен'),
(6, '20180110 09:00:00', 'исполнен'),
(5, '20180110 10:00:00', 'откат исполнен'),
(6, '20180110 11:00:00', 'исполнен'),
(5, '20180110 12:00:00', 'откат исполнен'),
(5, '20180110 13:00:00', 'откат введен'),
(6, '20180110 14:00:00', 'введен'),
(6, '20180110 15:00:00', 'исполнен'),
(5, '20180110 16:00:00', 'откат исполнен');


необходимо сопоставить каждому откату состояния запись вхождения в состояние:
то есть в итоге должна получится таблица вида

idactdatastateidactdatestate
16'20180110 08:00:00''введен'65'20180110 13:00:00''откат введен'
26'20180110 09:00:00''исполнен'35'20180110 10:00:00''откат исполнен'
46'20180110 11:00:00''исполнен'55'20180110 12:00:00''откат исполнен'
76'20180110 14:00:00''введен'nullnullnullnull
86'20180110 15:00:00''исполнен'95'20180110 16:00:00''откат исполнен'


думаю смысл понятен.

Как вариант я накатал scalar-clr которая возвращает нумерацию для групп с учетом изменения значения входного параметра, но он а довольно убого выглядит, особенно в связи с предположением что если ее использовать в нескольких запросах результаты будут корявыми.

а вот стандартные окошки что то у меня в голове не двигаются с учетом вариативности изменения значения.

PIVOT или CASE

$
0
0
Ребят, всем доброго дня.
Работала я себе спокойно с кейсами, а тут сказали сделать тоже самое с PIVOT.
Есть у меня таблица в которой есть ключевое поле SampleID, поле NAME , где хранятся виртуальные столбцы и поле VALUE, где значения этих столбцов. Чтобы увидеть эту таблицу в нормальном виде, я писала так:
(CASE when [CORPSAMPLEASSAY_N].[NAME] = 'Ag_MA-UT_ppm' then [CORPSAMPLEASSAY_N].[VALUE] ELSE NULL END) as [Ag_MA_UT_ppm]


Пытаюсь уже четвертый час разобраться с PIVOT, но он выдает пустые значения. А они есть!
declare  @CORPSAMPLEASSAY  table (sampleid varchar(255),name varchar(20), [value] float)
insert into @CORPSAMPLEASSAY  (sampleid, name,[value]) values ('UZ-001', 'Ag_MA_UT_ppm',0.05)
insert into @CORPSAMPLEASSAY  (sampleid, name,[value]) values ('UZ-001', 'As_MA_UT_ppm',2.05)
insert into @CORPSAMPLEASSAY  (sampleid, name,[value]) values ('UZ-001', 'Al_MA_UT_ppm',25)


Применяю вот так
select sampleid, [Ag_MA_UT_ppm], [Al_MA_UT_ppm], [As_MA_UT_ppm] from (select sampleid, name, value from [CORPSAMPLEASSAY] where sampleid='UZ-001')x
pivot (max(x.value) for name in ([Ag_MA_UT_ppm], [Al_MA_UT_ppm], [As_MA_UT_ppm]))z  


Выдает пустую таблицу.
Подскажите, пожалуйста, в чем моя ошибка? Когда
Select * from @CORPSAMPLEASSAY
, то значения есть


Кажется у меня кривые руки...

Двойное снижение цен

$
0
0
Здравствуйте!

Этот пост является продолжением поста Предыдущее значение вычисляемого поля. Но акцент делает на двойное снижение цен.

Есть исходные данные цен по отгрузочным дням.

В некоторые днях по каждому [Код ТТ] + [Код продукции] бывают снижения цены, вот их и нужно промаркировать.

Написан SQL-запрос.
+SQL-запрос
DECLARE @Таблица table(		
	[Код ТТ] varchar(8),	
	[Код продукции] varchar(8),
	[Дата] date,
	[Отгрузки шт] integer,	
	[Цена] decimal(8,0)
	)	
;

INSERT INTO
  @Таблица
VALUES 
('Код ТТ1','SKU1', '01.01.2014', 1, 100),
('Код ТТ1','SKU1', '02.01.2014', 2, 100),
('Код ТТ1','SKU1', '03.01.2014', 1, 90),
('Код ТТ1','SKU1', '04.01.2014', 1, 100),
('Код ТТ1','SKU1', '05.01.2014', 1, 100),
('Код ТТ1','SKU1', '08.01.2014', 1, 100),
('Код ТТ1','SKU2', '01.01.2014', 1, 100),
('Код ТТ1','SKU2', '02.01.2014', 2, 100),
('Код ТТ1','SKU2', '03.01.2014', 1, 90),
('Код ТТ1','SKU2', '04.01.2014', 1, 80),
('Код ТТ1','SKU2', '05.01.2014', 1, 90),
('Код ТТ2','SKU1', '01.01.2014', 1, 100),
('Код ТТ2','SKU1', '02.01.2014', 2, 100),
('Код ТТ2','SKU1', '03.02.2014', 1, 90),
('Код ТТ2','SKU1', '04.02.2014', 1, 80),
('Код ТТ2','SKU1', '05.02.2014', 1, 90),
('Код ТТ2','SKU1', '08.03.2014', 1, 100);

Declare @ДельтаПредел decimal(5,2) = 0.07;

WITH Т AS (
	SELECT		
		[Код ТТ],
		[Код продукции],	
		[Дата],
		[Отгрузки шт],		
		[Цена],		
		ROW_NUMBER()over(Partition by [Код ТТ], [Код продукции] order by  Convert(datetime,[Дата],104))	AS [ID]
	FROM
		@Таблица
)
,

cte AS (
		SELECT
			*,
			т.[Цена] AS [Цена пред],
			0 AS [Маркировка по пред цене],
			[Цена пред которая используется в расчете]=cast(null as decimal(8,0))
		FROM
			Т т 
		WHERE
			id=1
	UNION ALL	
	SELECT
		т.*,
		т.[Цена], 
		CASE
			WHEN cte.[Цена пред] IS NOT NULL AND cte.[Цена пред] <> 0 THEN
				CASE
					WHEN ((т.[Цена] / cte.[Цена пред])-1) <= -@ДельтаПредел THEN
						1
					ELSE
						CASE
							WHEN  ((т.[Цена] / cte.[Цена пред])-1) <= @ДельтаПредел AND cte.[Маркировка по пред цене] =1 THEN
								1
							ELSE
								0
							END
				END
		END,
		cte.[Цена пред]
	FROM
		Т т 
	inner join
		cte
	ON
		т.id=cte.id+1
		AND
		т.[Код ТТ]=cte.[Код ТТ]
		AND 
		т.[Код продукции]=cte.[Код продукции]
)

SELECT
	[Код ТТ],
	[Код продукции],	
	[Дата],
	[Отгрузки шт],		
	[Цена],
	[ID],
	[Маркировка по пред цене],
	[Цена пред которая используется в расчете] AS [Цена пред]
FROM
	cte c
ORDER BY	
	[Код ТТ],
	[Код продукции],
	[ID]
OPTION (MAXRECURSION 0)
Следует учесть, что тут не маркируется первая строка.
+Но тут не учитывается такой фактор как двойное снижение цены.
Код ТТ Код продукции Дата Отгрузки шт Цена ID Маркировка по пред цене Цена пред
Код ТТ1 SKU1 01.01.2014 1 100 1 0 NULL
Код ТТ1 SKU1 02.01.2014 2 100 2 0 100
Код ТТ1 SKU1 03.01.2014 1 90 3 1 100
Код ТТ1 SKU1 04.01.2014 1 100 4 0 90
Код ТТ1 SKU1 05.01.2014 1 100 5 0 100
Код ТТ1 SKU1 08.01.2014 1 100 6 0 100
Код ТТ1 SKU2 01.01.2014 1 100 1 0 NULL
Код ТТ1 SKU2 02.01.2014 2 100 2 0 100
Код ТТ1 SKU2 03.01.2014 1 90 3 1 100
Код ТТ1 SKU2 04.01.2014 1 80 4 1 90
Код ТТ1 SKU2 05.01.2014 1 90 5 0 80
Код ТТ2 SKU1 2014-01-01 1 100 1 0 NULL
Код ТТ2 SKU1 2014-01-02 2 100 2 0 100
Код ТТ2 SKU1 2014-02-03 1 90 3 1 100
Код ТТ2 SKU1 2014-02-04 1 80 4 1 90
Код ТТ2 SKU1 2014-02-05 1 90 5 0 80
Код ТТ2 SKU1 2014-03-08 1 100 6 0 90
Для решения такой проблемы делаю еще одну маркировку - по максимальной цене за текущий месяц, чтобы потом можно привязать к первой маркировке. Максимальная цена предполагает что это базовая цена.
+SQL-запрос
...
WITH Т AS (
	SELECT		
		[Код ТТ],
		[Код продукции],	
		[Дата],
		[Отгрузки шт],		
		[Цена],		
		ROW_NUMBER()over(Partition by [Код ТТ], [Код продукции] order by  Convert(datetime,[Дата],104))	AS [ID]
	FROM
		@Таблица
)
,

cte AS (
		SELECT
			*,
			т.[Цена] AS [Цена пред],
			0 AS [Маркировка по пред цене],
			[Цена пред которая используется в расчете]=cast(null as decimal(8,0))
		FROM
			Т т 
		WHERE
			id=1
	UNION ALL	
	SELECT
		т.*,
		т.[Цена], 
		CASE
			WHEN cte.[Цена пред] IS NOT NULL AND cte.[Цена пред] <> 0 THEN
				CASE
					WHEN ((т.[Цена] / cte.[Цена пред])-1) <= -@ДельтаПредел THEN
						1
					ELSE
						CASE
							WHEN  ((т.[Цена] / cte.[Цена пред])-1) <= @ДельтаПредел AND cte.[Маркировка по пред цене] =1 THEN
								1
							ELSE
								0
							END
				END
		END,
		cte.[Цена пред]
	FROM
		Т т 
	inner join
		cte
	ON
		т.id=cte.id+1
		AND
		т.[Код ТТ]=cte.[Код ТТ]
		AND 
		т.[Код продукции]=cte.[Код продукции]
),

cte2 AS (
	SELECT
		[Код ТТ],
		[Код продукции],	
		[Дата],
		[Отгрузки шт],		
		[Цена],
		[ID],
		[Маркировка по пред цене],
		[Цена пред которая используется в расчете] AS [Цена пред],
		cte1.[Макс Цена за тек месяц],
		(CASE WHEN cte1.[Макс Цена за тек месяц] <> 0 THEN
			(CASE WHEN [Цена] <= cte1.[Макс Цена за тек месяц] AND [Цена] / cte1.[Макс Цена за тек месяц] - 1 <= -@ДельтаПредел THEN 1 ELSE 0 END) 
		END) AS [Маркировка по макс цене за тек месяц],
		LAG([Маркировка по пред цене]) OVER(Partition by [Код ТТ],[Код продукции] ORDER BY  [ID]) AS [Предыдущая Маркировка по пред цене]
	FROM
		cte c
	CROSS APPLY 
		(
			SELECT MAX(a.[Цена]) as [Макс Цена за тек месяц]
			FROM cte a
			WHERE			
				a.[Код ТТ]	= c.[Код ТТ]
				AND
				a.[Код продукции]= c.[Код продукции]
				AND
				a.[Дата] BETWEEN DATEADD(day,1,EOMONTH(DATEADD(month,-1,c.[Дата]))) AND EOMONTH (c.[Дата])
		) AS cte1
)

SELECT
	[Код ТТ],
	[Код продукции],	
	[Дата],
	[Отгрузки шт],		
	[Цена],
	[ID],
	[Маркировка по пред цене],
	[Цена пред],
	[Макс Цена за тек месяц],
	[Маркировка по макс цене за тек месяц],
	[Предыдущая Маркировка по пред цене],
	(CASE
		WHEN [Маркировка по пред цене] = 1 THEN
			1
		WHEN [Маркировка по пред цене] <> 1 AND [Предыдущая Маркировка по пред цене] = 1 AND [Маркировка по макс цене за тек месяц] = 1 THEN
			1
		ELSE
			0
	END) AS [КОРРЕКТ Маркировка по пред цене]
FROM
	cte2
ORDER BY	
	[Код ТТ],
	[Код продукции],
	[ID]
OPTION (MAXRECURSION 0)
+Не улавливается для строки Код ТТ2 + SKU1 + 2014-02-05
Код ТТ Код продукции Дата Отгрузки шт Цена ID Маркировка по пред цене Цена пред Макс Цена за тек месяц Маркировка по макс цене за тек месяц Предыдущая Маркировка по пред цене КОРРЕКТ Маркировка по пред цене
Код ТТ1 SKU1 2014-01-01 1 100 1 0 NULL 100 0 NULL0
Код ТТ1 SKU1 2014-01-02 2 100 2 0 100 100 0 0 0
Код ТТ1 SKU1 2014-01-03 1 903 1 100 100 1 0 1
Код ТТ1 SKU1 2014-01-04 1 100 4 0 90 100 0 1 0
Код ТТ1 SKU1 2014-01-05 1 100 5 0 100 100 0 0 0
Код ТТ1 SKU1 2014-01-08 1 100 6 0 100 100 0 0 0
Код ТТ1 SKU2 2014-01-01 1 100 1 0 NULL 100 0 NULL 0
Код ТТ1 SKU2 2014-01-02 2 100 2 0 100 1000 0 0
Код ТТ1 SKU2 2014-01-03 1 90 3 1 100 100 1 0 1
Код ТТ1 SKU2 2014-01-04 1 80 4 1 90 100 1 1 1
Код ТТ1 SKU2 2014-01-05 1 90 5 0 80 100 1 1 1
Код ТТ2 SKU1 2014-01-01 1 100 1 0 NULL 100 0 NULL 0
Код ТТ2 SKU1 2014-01-02 2 100 2 0 100 100 0 0 0
Код ТТ2 SKU1 2014-02-03 1 90 3 1 100 90 0 0 1
Код ТТ2 SKU1 2014-02-04 1 80 4 1 90 90 1 1 1
Код ТТ2 SKU1 2014-02-05 1 90 5 0 80 90 0 1 0
Код ТТ2 SKU1 2014-03-08 1 100 6 0 90 100 0 0 0
Маркировать по максимальной цене можно по разному:
- за текущий месяц (используется в данном SQL-запросе)
- за предыдущие n-ые месяца и текущий месяц
- за текущий месяц и следующие n-месяца
- за предыдущие n-ые месяца, за текущий месяц и за следующие -ые месяца.
Но если увеличивать период для маркировки максимальной цены, данная маркировка становится не точной.

Кажется слишком усложняю. Чтобы уловить двойное снижение цен нужно ли было использовать маркировку по максимальной цене? Достаточно ли было воспользоваться первой маркировкой? Если да, то как это сделать?

количество процентов (cast)

$
0
0
cast(cast(count(case when r.value=1 then 1 end) as decimal(5,0))/COUNT(name)*100 as decimal(5,0))


как-то проще возможно узнать долю r.value=1 от COUNT(name)?

Сложная сортировка для подсчёта итогов

$
0
0
Всем здравствуйте.
Пишу программу для подсчета итогов, разобрался с sum() и двойной сортировкой, но сделать нужную сортировку всё равно не получается.

Есть таблица вида:
"PRODUCT""AGE""COMPANY""SALARY"
"Appple"32"Ahmedabad"2000
"Banana"25"Delhi"1500
"Banana"23"Kota"2000
"Orange"25"Mumbai"6500
"Grapes"27"Bhopal"2500
"Orange"22"MP"4500
"Orange"24"Indore"10000


Нужно получить таблицу вида:
"PRODUCT""AGE""COMPANY""SALARY"
"Orange"21000
"Orange"24"Indore"10000
"Orange"25"Mumbai"6500
"Orange"22"MP"4500
"Banana"3500
"Banana"23"Kota"2000
"Banana"25"Delhi"1500
"Grapes"2500
"Grapes"27"Bhopal"2500
"Appple"2000
"Appple"32"Ahmedabad"2000


Т. е. считаем итог по каждому товару, максимальная итоговая сумма идет первой, после нее список записей с таким же товаром сортированные по убыванию, потом следующий итог с записями и т.д. Если делать двойную сортировку то получается список товаров по алфавиту внутри которого сортировка по итогу, а нужны группы товаров с сортировкой по итогу. Итог есть отсортированный в отдельной таблице. Пробовал делать цикл for по товарам, на каждый товар insert oreder by, но так очень долго. Реально это вообще сделать средствами SQL?
База CSV-файл (выгрузка из 1с), общение идет через "Microsoft.ACE.OLEDB.12.0".

ускорить отключение триггера

$
0
0
Добрый день.
Очень долго отрабатывают команды:
ALTER TABLE big_table DISABLE TRIGGER t1

и
ALTER TABLE big_table ENABLE TRIGGER t1



Таблица большая и активно используется.

Можно ли как-то ускорить включение-отключение триггера?

Группировка данных

$
0
0
Всем привет!

Помогите,пожалуйста, сгруппировать данные:
Есть вот такие данные:
NameEng NameRus Link
Apple Яблоко YYY
Apple Яблоко XXX
Orange Апельсин FFF


Надо получить вот такой вид:
NameEng NameRus Link
Apple Яблоко YYY
XXX
Orange Апельсин FFF


Код для создания таблицы:
DECLARE @TAB TABLE
(NameEng NVARCHAR (10),
NameRus NVARCHAR (10),
Link NVARCHAR (10))

INSERT INTO @TAB
VALUES ('Apple', 'Яблоко', 'YYY'),
('Apple', 'Яблоко', 'XXX'),
('Orange', 'Апельсин', 'FFF')

SELECT * FROM @TAB

копированние данных из SQL в mongodb

$
0
0
Подскажите инструменты для копирования из таблицы SQL Server куда прибор записывает данные каждую минуту в таблицу mongodb.
Пробовал kafka работает, пару дней потом ее вышибает чем-то, вообще не стабильная система.
__________________________________________________________________
THE TRUTH IS OUT THERE

SQL 2012 - Оптимизация JOIN (без хинтов)

$
0
0
SQL 2012, Есть факты на сотни миллионов строк (50 колонн), измерения в сотни тысяч строк (100 колонн)

Из фактов нужно выгрузить небольшой агрегированный набор (миллион строк) за допустим одну неделю или месяц из десятка лет.

1) Что теоретически будет быстрее на больших наборах? (inner) JOIN-ить уже агрегированные подзапросы (с только нужными колоннами) или напрямую сами таблицы и потом агрегировать на нужную гранулярность если из этих всех таблиц нужно всего лишь несколько колонн? (join-ы только по integer)

2) будет-ли быстрее делать через "with cte.." вместо subquery (или напрямую из таблиц) до нужной гранулярности с минимумом необходимых полей .. и только потом join-ить всё в необходимый resultset.

предположим что join-ноги не индексированы

вопрос чисто по оптимальному join как оно есть, а не реорганизацию источника (индексации и пр.)

пожалуйста без вариантов проверить самому (прав на чистку кэша нет, как и многих других)

Спсб.

Выгрузка данных из БД находящейся на SQL Server 2008 R2

$
0
0
Здравствуйте. Подскажите пожалуйста, как сделать выгрузку всех таблиц БД находящихся на SQL Server-e 2008 в Excel?

Подскажите условие

$
0
0
Добрый день, накиньте мысль как можно прописать условие. Смысл: имеется запрос, в нём задаются параметры, один из параметров students, так вот, какое условие можно прописать, что бы при выборе одного или нескольких студентов условие исполнялось и в результате запрос обрабатывал только выбранных. Так же возможно, что студентов не выберут, в этом случае необходимо, что бы условие игнорировалось и запрос обрабатывал всех из бд.
В голову кроме приведенного ниже ничего не лезет =(
 and case when @st is not null then STUDENTS.STUDENTS_ID in @st

Сам запрос:
declare @DBK_SYS_VAR_df datetime

declare @DBK_SYS_VAR_dt datetime

declare @d datetime
set @d = GETDATE()
declare @DBK_SYS_VAR_F3 money
set @DBK_SYS_VAR_F3 = 0
declare @id int
declare @DATE_OSTATOK datetime
set @DATE_OSTATOK = {ts '2017-01-01 00:00:00.000'}

declare @st  int
set @st = 100

set @DBK_SYS_VAR_df = '2018-01-01 00:00:00.000'
set @DBK_SYS_VAR_dt = '2018-01-11 00:00:00.000'

SELECT  
 STUDENTS.STUDENTS_ID, FM_CONTR.FM_CONTR_ID, 
  isnull((SELECT sum(at.TRAN_SUM)
FROM FM_ACCOUNT_TRAN at WITH(NOLOCK)
join FM_ACCOUNT_TRAN at2 WITH(NOLOCK) on at.FM_MAIN_TRAN_ID = at2.fm_account_tran_id 
where at2.FM_CONTR_ID = FM_CONTR.FM_CONTR_ID 
  AND (at.TRAN_DATE >= isnull(@DATE_OSTATOK, '2000-01-01 00:00:00.000') and at.TRAN_DATE < @DBK_SYS_VAR_df ) 
  and at.TRAN_TYPE in ('J','K','Z', 'I', 'A','W','O','B')), 0) ostatok_nop, @DBK_SYS_VAR_df df, @DBK_SYS_VAR_dt dt
FROM
 STUDENTS STUDENTS WITH(NOLOCK)  
 JOIN FM_CLINK_STUDENTS FM_CLINK_STUDENTS WITH(NOLOCK)  ON STUDENTS.STUDENTS_ID = FM_CLINK_STUDENTS.STUDENTS_ID 
 JOIN FM_CLINK FM_CLINK WITH(NOLOCK)  ON FM_CLINK.FM_CLINK_ID = FM_CLINK_STUDENTS.FM_CLINK_ID 
 JOIN FM_CONTR FM_CONTR WITH(NOLOCK)  ON FM_CONTR.FM_CONTR_ID = FM_CLINK.FM_CONTR_ID 
WHERE
 (FM_CONTR.DEPOSIT=1) and ........
Viewing all 7251 articles
Browse latest View live