Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Условие по алиасу (число прочтений - 3032 )
Ilya
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 26. Мая 2013
Условие по алиасу
18. Июня 2013 :: 10:13
Печать  
Добрый день. Возникла проблема с отборкой данных по алиасу в запросе. Запрос такой:
|SELECT
     |  Док.IDDOC [Ссылка $Документ.Реализация],
     |  $СвойстваНоменклатуры.ЗначениеСвойства as [ЗначенияСвойств $Справочник.ЗначенияСвойств],
     |  $ПунктыРазгрузки.Территория as [Территория $Справочник.Регионы],
     |  $Склады.Регион [Регион $Справочник.Регионы],
     |  $Док.Склад as [Склад $Справочник.Склады],
     |  CASE WHEN $ПунктыРазгрузки.Территория =:НетРегиона THEN $Склады.Регион ELSE $ПунктыРазгрузки.Территория END as [РегДокум $Справочник.Регионы],
     |  Жур.$ОбщийРеквизит.Фирма as [Фирма $Справочник.Фирмы],
     |  $Док.Контрагент as [Контрагент $Справочник.Контрагенты],
     |  $Док.ПунктРазгрузки as [ПунктРазгрузки $Справочник.ПунктыРазгрузки],
     |  $Док.СводнаяНакладная as СводнаяНакладная,
     |  $ДокС.Номенклатура as [Номенклатура $Справочник.Номенклатура],
     |  $ДокС.ТАТабЧасть as [ТАТабЧасть $Справочник.ТорговыеАгенты],
     |  SUM($ДокС.Сумма) as Сумма,
     |  SUM($ДокС.СуммаНДС) as СуммаНДС,
     |  SUM($ДокС.Количество) as Количество,
     |  SUM($ДокС.КолНедовоза) as КолНедовоза,
     |  SUM($ДокС.СуммаНедовоза) as СуммаНедовоза,
     |  SUM($ДокС.СуммаНДСНедовоза) as СуммаНДСНедовоза
     |FROM
     |  $Документ.Реализация as Док
     |  FULL OUTER JOIN $ДокументСтроки.Реализация AS ДокС ON Док.IDDOC = ДокС.IDDOC
     |  INNER JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK) ON Номенклатура.ID = $ДокС.Номенклатура
     |  INNER JOIN $Справочник.СвойстваНоменклатуры AS СвойстваНоменклатуры With (NOLOCK) ON СвойстваНоменклатуры.PARENTEXT = Номенклатура.ID
     |  INNER JOIN $Справочник.ПунктыРазгрузки AS ПунктыРазгрузки With (NOLOCK) ON ПунктыРазгрузки.ID = $Док.ПунктРазгрузки
     |  INNER JOIN $Справочник.Склады AS Склады With (NOLOCK) ON Склады.ID = $Док.Склад
     |
     |
     |INNER JOIN
     |  _1SJourn as Жур ON Жур.IDDoc = Док.IDDoc AND
     |                     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
     |                     Жур.Closed & 1 = 1
     |                     
     |WHERE
     | $СвойстваНоменклатуры.ЗначениеСвойства IN (SELECT Val FROM #СписСвойств) AND
     | РегДокум = :Регион AND
     | $Док.СводнаяНакладная = 0
     |";
Вот по этому самому РегДокум и ругается. Что можно сделать, подскажите, пожалуйста...
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Условие по алиасу
Ответ #1 - 18. Июня 2013 :: 10:24
Печать  
Или оборачивать или в условии так и написать:
Код
Выбрать все
Where
CASE WHEN $ПунктыРазгрузки.Территория =:НетРегиона THEN $Склады.Регион ELSE $ПунктыРазгрузки.Территория END = :Регион  

  
Наверх
IP записан
 
Ilya
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 26. Мая 2013
Re: Условие по алиасу
Ответ #2 - 18. Июня 2013 :: 10:56
Печать  
Спасибо, помогло. Правда, немного по другому:
CASE WHEN $ПунктыРазгрузки.Территория =:НетРегиона THEN $Склады.Регион ELSE $ПунктыРазгрузки.Территория END IN (SELECT Val FROM #СписРегион)

Если сделать просто =:Регион, то ругается:
State 22018, native 245, message [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the varchar value '     F   ' to a column of data type int.

А что значит оборачивать (простите за глупый вопрос  Озадачен)
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Условие по алиасу
Ответ #3 - 18. Июня 2013 :: 11:08
Печать  
Ilya писал(а) 18. Июня 2013 :: 10:56:
А что значит оборачивать (простите за глупый вопрос  Озадачен)

Это типа того:

Код
Выбрать все
select
   Табличка.Поле,
   ................
from
    ( select
		 case ......end as Поле
	 from
		 ....
     ) as Табличка
Where    Табличка.Поле = :Регион 

  
Наверх
 
IP записан
 
Ilya
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 26. Мая 2013
Re: Условие по алиасу
Ответ #4 - 18. Июня 2013 :: 12:04
Печать  
ТекстЗапроса = "
     |SELECT
     |  Док.IDDOC [Ссылка $Документ.Реализация],
     |  ТаблРег.РегДокум,
     |  $СвойстваНоменклатуры.ЗначениеСвойства as [ЗначенияСвойств $Справочник.ЗначенияСвойств],
     |  $ПунктыРазгрузки.Территория as [Территория $Справочник.Регионы],
     |  $Склады.Регион [Регион $Справочник.Регионы],
     |  $Док.Склад as [Склад $Справочник.Склады],
     |  Жур.$ОбщийРеквизит.Фирма as [Фирма $Справочник.Фирмы],
     |  $Док.Контрагент as [Контрагент $Справочник.Контрагенты],
     |  $Док.ПунктРазгрузки as [ПунктРазгрузки $Справочник.ПунктыРазгрузки],
     |  $Док.СводнаяНакладная as СводнаяНакладная,
     |  $ДокС.Номенклатура as [Номенклатура $Справочник.Номенклатура],
     |  $ДокС.ТАТабЧасть as [ТАТабЧасть $Справочник.ТорговыеАгенты],
     |  SUM($ДокС.Сумма) as Сумма,
     |  SUM($ДокС.СуммаНДС) as СуммаНДС,
     |  SUM($ДокС.Количество) as Количество,
     |  SUM($ДокС.КолНедовоза) as КолНедовоза,
     |  SUM($ДокС.СуммаНедовоза) as СуммаНедовоза,
     |  SUM($ДокС.СуммаНДСНедовоза) as СуммаНДСНедовоза
     |FROM
     |  (SELECT
     |   
     |   CASE WHEN $ПунктыРазгрузки.Территория =:НетРегиона THEN $Склады.Регион
     |        ELSE $ПунктыРазгрузки.Территория END as [РегДокум $Справочник.Регионы]
     |           ) as ТаблРег
     |
     |  $Документ.Реализация as Док
     |  FULL OUTER JOIN $ДокументСтроки.Реализация AS ДокС ON Док.IDDOC = ДокС.IDDOC
     |  INNER JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK) ON Номенклатура.ID = $ДокС.Номенклатура
     |  INNER JOIN $Справочник.СвойстваНоменклатуры AS СвойстваНоменклатуры With (NOLOCK) ON СвойстваНоменклатуры.PARENTEXT = Номенклатура.ID
     |  INNER JOIN $Справочник.ПунктыРазгрузки AS ПунктыРазгрузки With (NOLOCK) ON ПунктыРазгрузки.ID = $Док.ПунктРазгрузки
     |  INNER JOIN $Справочник.Склады AS Склады With (NOLOCK) ON Склады.ID = $Док.Склад
     | 
     |INNER JOIN
     |  _1SJourn as Жур ON Жур.IDDoc = Док.IDDoc AND
     |                     Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND
     |                     Жур.Closed & 1 = 1
     |                     
     |WHERE
     | $СвойстваНоменклатуры.ЗначениеСвойства IN (SELECT Val FROM #СписСвойств) AND
     | ТаблРег.РегДокум IN (SELECT Val FROM #СписРегион) AND"

типа того?

  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Условие по алиасу
Ответ #5 - 18. Июня 2013 :: 12:08
Печать  
Неа Улыбка

Ты просто свой запрос (изначальный ) оборачиваешь в подзапрос,
и уже снаружи делаешь условия на поля..
  
Наверх
 
IP записан
 
Ilya
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 8
Зарегистрирован: 26. Мая 2013
Re: Условие по алиасу
Ответ #6 - 18. Июня 2013 :: 12:11
Печать  
т.е.
SELECT
новый запрос
FROM
(SELECT
старый запрос

???
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Условие по алиасу
Ответ #7 - 18. Июня 2013 :: 12:31
Печать  
да.

Я тебе выше пример привёл.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать