Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка одной даты из двух столбцов 
:(
    Опции темы
ohota5476
Дата 12.6.2017, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.6.2017

Репутация: нет
Всего: нет



Имеется таблица dbo.Abonent, в ней столбец DogovorEndPeriod - дата планируемого окончания договора, столбец DogovorDateCancel - дата досрочного расторжения договора, если таковая имеется (в противном случае значение null).
Необходимо получить столбец с датой реального окончания договора. Т.е. если в DogovorDateCancel значение не null, то берем дату из него, в противном случае - из DogovorEndPeriod.
Испробовал множество вариантов, решить задачу не получается. Один из последних приведен ниже:
Код

SELECT * FROM dbo.Abonent
IF dbo.Abonent.DogovorDateCancel IS NULL BEGIN
SELECT dbo.Abonent.DogovorDateCancel AS Data FROM dbo.Abonent
END
ELSE
SELECT dbo.Abonent.DogovorEndPeriod AS Data FROM dbo.Abonent

Выдает ошибку "Не удалось привязать составной идентификатор dbo.Abonent.DogovorDateCancel". Предполагаю, что сам подход изначально не правильный. Буду благодарен за помощь.
PM MAIL   Вверх
Akina
Дата 12.6.2017, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453



Код

SELECT ... , COALESCE(DogovorDateCancel, DogovorEndPeriod) AS Data
...



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ohota5476
Дата 12.6.2017, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.6.2017

Репутация: нет
Всего: нет



Спасибо, работает. Также нашел еще один вариант решения данной задачи.
Код

SELECT ISNULL(DogovorDateCancel , DogovorEndPeriod) as Data, * FROM Abonent

PM MAIL   Вверх
ohota5476
Дата 12.6.2017, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 11.6.2017

Репутация: нет
Всего: нет



Код

SELECT COALESCE (DogovorDateCancel, DogovorEndPeriod) AS Data FROM dbo.Abonent

Data является реальной датой расторжения договора. Ее необходимо сравнить с датой оплаты PayData. Если дата оплаты меньше даты расторжения договора, то вывести в Dolg значение поля SumDT (выставленный счет), иначе вывести в Dolg это DocKT.SumDT-DocKT.SumKT (выставленный-оплаченный).

Пытался набросать типа
Код

IF dbo.DocKT.PayDate<Data BEGIN 
SELECT SumDT AS Dolg FROM dbo.DocKT
END
ELSE
SELECT SumDT-SumKT AS Dolg FROM dbo.DocKT

Не позволяет сравнить dbo.DocKT.PayDate<Data. К тому же, не знаю, как это лучше к первому запросу прикрутить. Понимаю, что надо много еще чего изучить, но сейчас стоит данная задача, которую необходимо решить. Буду благодарен за помощь.
PM MAIL   Вверх
Akina
Дата 13.6.2017, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 453



IF - это ветвление выполнения в процедуре. В рамках одного запроса для альтернативной выборки в зависимости от условия следует использовать CASE:
Код

SELECT CASE WHEN (condition) THEN (value when true) ELSE (value when false) END, ...


Цитата(ohota5476 @  12.6.2017,  15:41 Найти цитируемый пост)
нашел еще один вариант решения данной задачи.

ISNULL - это та же COALESCE, но со строго 2 параметрами.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.1270 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.