Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Invalid column name при двойном вложенном запросе, почему?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 408
попробую изобразить структуру запроса, может она и не нужна вся...
select
t1.f1,t1.f2,
t2.f1, t2.f2
--1 cast(case when t2.f1 <> 0 then t1.f1/t2.f2 elese 1 end as int)  as f3
--2 (selet cast(case when t2.f1 <> 0 then t1.f1/t2.f2 elese 1 end as int) as f3)
--3 (select max(s) from (selet cast(case when t2.f1 <> 0 then t1.f1/t2.f2 elese 1 end as int)) tmp) as f3
from 
((select ... from ... join ... join.. join) union (select... join ... join))
join
..
join table1 t1
...
join table2 t2


если поле f3 вычисляется по 1му или 2му варианту, все работает, а при 3м варианте пишет "Invalid column name 'f1'"
вложенный запрос в 3м варианте не стал полностью описывать но там добавляется несколько значений через union all
если в место 3го варианта написать напрямую

(select max(s) from ( select 0 as s union all select 5) tmp) as f3


то все работает
как победить?
27 ноя 12, 16:13    [13537681]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
elese

это в реальном запросе или опечатка?
27 ноя 12, 16:15    [13537696]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 408
Konst_One,
опечатка
27 ноя 12, 16:17    [13537722]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
(select 
	max(s) 
from 
	(selet cast(case when t2.f1 <> 0 then t1.f1/t2.f2 elese 1 end as int)) tmp
) 
as f3


сложно разобрать что тут правильно,а что нет. куча опечаток и неверных алиасов
27 ноя 12, 16:20    [13537773]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 408
вот реальный кусок
SELECT
...
StockSumQuantity.SP278,
StockD3.SP8813,
StockD3.SP8814
,CAST(CASE WHEN StockD3.SP8813 <> 0 THEN StockSumQuantity.SP277/StockD3.SP8813 ELSE 1 END as int) as  GiftRatioQuantity
,CAST(CASE WHEN StockD3.SP8814 <> 0 THEN StockSumQuantity.SP278/StockD3.SP8814 ELSE 1 END as int) as  GiftRatioSum
,(SELECT MAX(x) FROM (SELECT StockSumQuantity.SP278/StockD3.SP8814 as x UNION ALL SELECT 1) a)as d
FROM
...
27 ноя 12, 16:24    [13537813]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
в реальном куске всё вроде на месте, алиас x присутствует и max(x) вернёт
27 ноя 12, 16:25    [13537827]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
Glory
Member

Откуда:
Сообщений: 104760
SELECT StockSumQuantity.SP278/StockD3.SP8814 as x
UNION ALL
SELECT 1

вы что эти хотите сказть ?
Из чего делать SELECT StockSumQuantity.SP278/StockD3.SP8814 ?
27 ноя 12, 16:26    [13537842]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 408
Konst_One,
пишет
Сообщение 207, уровень 16, состояние 3, строка 169
Invalid column name 'SP278'.
27 ноя 12, 16:27    [13537851]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37056
TJ001
вот реальный кусок
SELECT
...
StockSumQuantity.SP278,
StockD3.SP8813,
StockD3.SP8814
,CAST(CASE WHEN StockD3.SP8813 <> 0 THEN StockSumQuantity.SP277/StockD3.SP8813 ELSE 1 END as int) as  GiftRatioQuantity
,CAST(CASE WHEN StockD3.SP8814 <> 0 THEN StockSumQuantity.SP278/StockD3.SP8814 ELSE 1 END as int) as  GiftRatioSum
,(SELECT MAX(x) FROM (SELECT StockSumQuantity.SP278/StockD3.SP8814 as x UNION ALL SELECT 1) a)as d
FROM
...
Проверяйте остальной код. Это работает без проблем:

if object_id('tempdb..#t1') is not null
    drop table #t1
go    
if object_id('tempdb..#t2') is not null
    drop table #t2
go
create table #t1 ( SP8813 int, SP8814 int)        
go
create table #t2 ( SP277 int, SP278 int )
go

SELECT
StockSumQuantity.SP278,
StockD3.SP8813,
StockD3.SP8814
,CAST(CASE WHEN StockD3.SP8813 <> 0 THEN StockSumQuantity.SP277/StockD3.SP8813 ELSE 1 END as int) as  GiftRatioQuantity
,CAST(CASE WHEN StockD3.SP8814 <> 0 THEN StockSumQuantity.SP278/StockD3.SP8814 ELSE 1 END as int) as  GiftRatioSum
,(SELECT MAX(x) FROM (SELECT StockSumQuantity.SP278/StockD3.SP8814 as x UNION ALL SELECT 1) a)as d
FROM #t1 as StockD3, #t2  as StockSumQuantity


UPD: Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (X64) Sep 21 2011 22:45:45 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.0 <X64> (Build 6002: Service Pack 2)

Сообщение было отредактировано: 27 ноя 12, 16:31
27 ноя 12, 16:29    [13537872]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
ТС,from отсутствует, уже написали вам
27 ноя 12, 16:29    [13537875]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 408
я на SQL2000, может с этим как-то связано...
27 ноя 12, 16:32    [13537902]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37056
Glory
SELECT StockSumQuantity.SP278/StockD3.SP8814 as x
UNION ALL
SELECT 1

вы что эти хотите сказть ?
Из чего делать SELECT StockSumQuantity.SP278/StockD3.SP8814 ?
В коррелированном подзапросе можно посчитать выражение и без from.
27 ноя 12, 16:32    [13537903]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37056
TJ001
я на SQL2000, может с этим как-то связано...
Ну, сих раритетов у нас не водится, так что извиняйте.
27 ноя 12, 16:34    [13537913]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 408
Гавриленко Сергей Алексеевич,
эта строка работает без проблем, но как только вкладываю 2й уровень - ругается
,(SELECT CASE WHEN StockD3.SP8814 <> 0 THEN StockSumQuantity.SP278/StockD3.SP8814 ELSE  1 END as s)
27 ноя 12, 16:34    [13537914]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37056
TJ001
Гавриленко Сергей Алексеевич,
эта строка работает без проблем, но как только вкладываю 2й уровень - ругается
,(SELECT CASE WHEN StockD3.SP8814 <> 0 THEN StockSumQuantity.SP278/StockD3.SP8814 ELSE  1 END as s)
select @@version покажите, что ли.
27 ноя 12, 16:35    [13537922]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 408
Гавриленко Сергей Алексеевич,

Microsoft SQL Server 2000 - 8.00.2187 (Intel X86) Mar 9 2006 11:38:51 Copyright (c) 1988-2003 Microsoft Corporation Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
27 ноя 12, 16:39    [13537947]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37056
TJ001
Гавриленко Сергей Алексеевич,

Microsoft SQL Server 2000 - 8.00.2187 (Intel X86) Mar 9 2006 11:38:51 Copyright (c) 1988-2003 Microsoft Corporation Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
Тогда, видимо, 2000й так и работает. Не используйте третий вариант.
27 ноя 12, 16:40    [13537956]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 408
Гавриленко Сергей Алексеевич
TJ001
Гавриленко Сергей Алексеевич,

Microsoft SQL Server 2000 - 8.00.2187 (Intel X86) Mar 9 2006 11:38:51 Copyright (c) 1988-2003 Microsoft Corporation Standard Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
Тогда, видимо, 2000й так и работает. Не используйте третий вариант.


как же быть?
мне нужно чтобы возвращалось целое число и чтобы оно было больше нуля

вкладывать кейс в другой кейс и выполнять деление дважды?
27 ноя 12, 16:43    [13537983]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
Glory
Member

Откуда:
Сообщений: 104760
select a.id, (select w from(select a.id as w) as y)
from 
--sysobjects a
(select id from sysobjects) a

не работает такое в sql2000
а с комментированная строкой работает
27 ноя 12, 16:46    [13538006]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Гавриленко Сергей Алексеевич
TJ001
я на SQL2000, может с этим как-то связано...
Ну, сих раритетов у нас не водится, так что извиняйте.
Именно из-за 2000-го.
Начиная с 2005-го уровень вложенности неважен.
27 ноя 12, 16:50    [13538038]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
TJ001
как же быть?
мне нужно чтобы возвращалось целое число и чтобы оно было больше нуля

вкладывать кейс в другой кейс и выполнять деление дважды?
ISNULL(StockSumQuantity.SP278/NULLIF(StockD3.SP8814,0),1)
???
27 ноя 12, 16:57    [13538102]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 408
как красиво решить?
27 ноя 12, 16:57    [13538103]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 408
iap
TJ001
как же быть?
мне нужно чтобы возвращалось целое число и чтобы оно было больше нуля

вкладывать кейс в другой кейс и выполнять деление дважды?
ISNULL(StockSumQuantity.SP278/NULLIF(StockD3.SP8814,0),1)
???


не, получается

SP278/SP8814

29570,52/35000=0,844872

если обернуть в CAST будет 0
27 ноя 12, 17:00    [13538129]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 408
это работает
CAST(CASE WHEN StockD3.SP8814 >= StockSumQuantity.SP278 THEN 1 ELSE CASE WHEN StockD3.SP8814 <> 0 THEN StockSumQuantity.SP278/StockD3.SP8814 ELSE 1 END END as int)


что скажете, не очень криво?)
27 ноя 12, 17:16    [13538249]     Ответить | Цитировать Сообщить модератору
 Re: Invalid column name при двойном вложенном запросе, почему?  [new]
TJ001
Member

Откуда: от верблюда
Сообщений: 408
или так
CAST(CASE WHEN StockD3.SP8814 >= StockSumQuantity.SP278 THEN 1 ELSE ISNULL(StockSumQuantity.SP278/NULLIF(StockD3.SP8814,0),1) END as int)
27 ноя 12, 17:18    [13538259]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить