SQL-запросы

DI
На сайте с 22.01.2010
Offline
135
788

Задача:

Нужно найти людей (СНИЛС, ключ), у которых Справка действительна на день заезда в санаторий (DATE_IN), при условии что имеется дата выдачи справки (SDATE) и срок действия справки 6 месяцев (180 дней). Сейчас я выполняю запрос:


SELECT ID_FSS as 'ФСС', SNILS as 'СНИЛС', SDATE as 'Дата выдачи', (SDATE+180) as 'Действителен до:', DATE_IN as 'Заезд'
from SQUEUE
where STATE=1 and REQYEAR=15;

Далее выгружаю в Excel, где из даты 'Заезд' вычитаю дату 'Действителен до:' и если число положительное, то статус 'Справка просрочена'

=ЕСЛИ(('Заезд'-'Действителен до:')>0;Просрочена; Действует)

Можно ли весь этот геморрой с Excel высчитывать через запрос в SQL?

Оптимизайка
На сайте с 11.03.2012
Offline
396
#1

А что за СУБД? Обычно это расширениями SQL делается например оператор IIF или CASE / WHEN в зависимости от.

⭐ BotGuard (https://botguard.net) ⭐ — защита вашего сайта от вредоносных ботов, воровства контента, клонирования, спама и хакерских атак!
PN
На сайте с 22.08.2012
Offline
103
#2
DaImeR:
Задача:
Нужно найти людей (СНИЛС, ключ), у которых Справка действительна на день заезда в санаторий (DATE_IN), при условии что имеется дата выдачи справки (SDATE) и срок действия справки 6 месяцев (180 дней). Сейчас я выполняю запрос:

SELECT ID_FSS as 'ФСС', SNILS as 'СНИЛС', SDATE as 'Дата выдачи', (SDATE+180) as 'Действителен до:', DATE_IN as 'Заезд'
from SQUEUE
where STATE=1 and REQYEAR=15;

Далее выгружаю в Excel, где из даты 'Заезд' вычитаю дату 'Действителен до:' и если число положительное, то статус 'Справка просрочена'

Можно ли весь этот геморрой с Excel высчитывать через запрос в SQL?

можно оператором IF

Мой совет помог? Не скупись! Bitcoin 1Lseddet1o1B6odgXQHbGaWGwRkt1Db8Ef Ethereum 0x450f1a17461e25194B7F9226cDEe70173F39e1e1
DI
На сайте с 22.01.2010
Offline
135
#3
Оптимизайка:
А что за СУБД? Обычно это расширениями SQL делается например оператор IIF или CASE / WHEN в зависимости от.

Что за СУБД мне пока неизвестно (сам в догадках. Сисадмин-женщина говорит что так и называется БД😂), недавно устроился в гос. учреждение. Запрещены все операторы, кроме выборки SELECT :(

T
На сайте с 06.06.2013
Offline
81
#4
DaImeR:
Задача:
Нужно найти людей (СНИЛС, ключ), у которых Справка действительна на день заезда в санаторий (DATE_IN), при условии что имеется дата выдачи справки (SDATE) и срок действия справки 6 месяцев (180 дней). Сейчас я выполняю запрос:

SELECT ID_FSS as 'ФСС', SNILS as 'СНИЛС', SDATE as 'Дата выдачи', (SDATE+180) as 'Действителен до:', DATE_IN as 'Заезд'
from SQUEUE
where STATE=1 and REQYEAR=15;

Далее выгружаю в Excel, где из даты 'Заезд' вычитаю дату 'Действителен до:' и если число положительное, то статус 'Справка просрочена'

Можно ли весь этот геморрой с Excel высчитывать через запрос в SQL?

Раз "SDATE+180" работает, то просто добавьте в where "and (SDATE+180) >= DATE_IN"

Оптимизайка
На сайте с 11.03.2012
Offline
396
#5
DaImeR:
Что за СУБД мне пока неизвестно, недавно устроился в гос. учреждение.

Тогда или MS SQL или Oracle 😂 В этом случае используйте IIF:

SELECT ID_FSS as 'ФСС', SNILS as 'СНИЛС', SDATE as 'Дата выдачи', (SDATE+180) as 'Действителен до:', DATE_IN as 'Заезд', IIF((DATE_IN - (SDATE+180)) > 0, 'Просрочена', 'Действует') as 'Состояние'

from SQUEUE

where STATE=1 and REQYEAR=15;

DI
На сайте с 22.01.2010
Offline
135
#6
Оптимизайка:
Тогда или MS SQL или Oracle 😂 В этом случае используйте IIF:

SELECT ID_FSS as 'ФСС', SNILS as 'СНИЛС', SDATE as 'Дата выдачи', (SDATE+180) as 'Действителен до:', DATE_IN as 'Заезд', IIF((DATE_IN - (SDATE+180)) > 0, 'Просрочена', 'Действует') as 'Состояние'
from SQUEUE
where STATE=1 and REQYEAR=15;

Благодарю. Помогло. Работает. Как можно определить какая здесь БД? А то чувствую с датами намучаюсь

DI
На сайте с 22.01.2010
Offline
135
#7
Оптимизайка:
Тогда или MS SQL или Oracle 😂 В этом случае используйте IIF:

Оказывается СУБД HyTech. Впервые сталкиваюсь с такой, хорошо или плохо пока не знаю) Изучаю FAQ этой СУБД😒

DI
На сайте с 22.01.2010
Offline
135
#8

Дабы не плодить множество тем, решил продолжить эту. Да простят модераторы)

Есть такой запрос

// Отличие профиля в заявке и в путевке

fix all;

var @d1=$31-12-2014, @d2=today();
// @mask="%`NNN|-|NNN|-|NNN| |NN `s",
// @y=year(@d1)-2000;

fix all;
select SQ.ID_FSS as 'Филиал:',
SQ.CTREAT as '',
PT.CTREAT,
char(SQ.LNAME + ' ' + SQ.FNAME + ' ' + SQ.MNAME, 50) as 'ФИО',
SQ.REQNUM as '№ заявки',
SQ.REQDATE as 'Дата заявки',
SQ.DOCNUM as 'путевка №',
PT.DAYINS as 'заезд: ',
char(CT.NAME,50) as 'Профиль по заявке',
CT.NAME as 'Профиль по путевке'
from SQUEUE SQ, PTOUR PT, CTREATM CT, LQUEUE LQ, PFRO PF, TRNPMF TRN
where SQ.STATE=1 //распределенная заявка на этот год
and SQ.REQYEAR=15 // год заявки - 20000
and PT.BDAT between @d1 and @d2 // дата накладной
and SQ.ID_OWN=PT.IDL and SQ.CTREAT<>PT.CTREAT
;

выдает ошибку


[-34] Invalid link
In or near <select>
[-34] Invalid link
In or near <select>

на строке

and SQ.ID_OWN=PT.IDL and SQ.CTREAT<>PT.CTREAT

СУБД HyTech

В чем проблема? SQL же поддерживает знак неравенства <>

Оптимизайка
На сайте с 11.03.2012
Offline
396
#9

А если вместо <> попробовать !=

DI
На сайте с 22.01.2010
Offline
135
#10
Оптимизайка:
А если вместо <> попробовать !=

Не помогает. Та же ошибка, в том же месте

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий