2015-09-08 25 views
2

Получение сообщение об ошибке «Invalid Column Name», когда в том числе следующие в моем PHP MSSQL заявление Выберите ...MS SQL Invalid Column Name

IIf([PD_Mill_Start].[Job Name] Like '%glass%' Or [PD_Mill_Start].[Job Name] Like '%hinge%' Or [PD_Mill_Start].[Job Name] Like '%weather%' Or [PD_Mill_Start].[Job Name] Like '%molding%' Or [PD_Mill_Start].[Style] Like '%N/A%' Or [PD_Mill_Start].[Interior or Exterior] Like '%other%',[Batch Door Count],0) AS [Del Other Qty], 

Весь Выберите заявление выглядит следующим образом в случае, если это помогает ...

SELECT PD_Mill_Start.[Order Number], PD_Mill_Start.[Job Name], PD_Mill_Start.[Mill Start], PD_Mill_Start.[Mill Start] AS [Mill Start To Min], PD_Mill_Start.[Date Shipped], PD_Mill_Start.[Stain Grade/Paint Grade] AS Grade, PD_Delivery_Schedule.[Ship To Verified], PD_Delivery_Schedule.[Mill Start Sent Date], IIf([Date Shipped] Is Not Null,[Date Shipped],IIf([PD_Delivery_Schedule].[Departure Date] Is Not Null,[PD_Delivery_Schedule].[Departure Date],IIf([PD_Mill_Start].[Promised Date] Is Not Null,[PD_Mill_Start].[Promised Date],' '))) AS [Forecast Date], PD_Mill_Start.[Date Entered], PD_Mill_Start.[Promised Date], PD_Mill_Start.Style, PD_Mill_Start.[Batch Door Count], PD_Mill_Start.[Batch Jamb Count], PD_Mill_Start.[Interior or Exterior], IIf(SUBSTRING([PD_Mill_Start].[Interior or Exterior],1,1) Like '%i%','Interior',IIf(SUBSTRING([PD_Mill_Start].[Interior or Exterior],1,1) Like '%e%','Exterior','UnKnown')) AS [Rpt Int or Ext], PD_Mill_Start.Status, PD_Delivery_Schedule.Driver, PD_Delivery_Schedule.[Departure Date], PD_Delivery_Schedule.[Departure Time], PD_Delivery_Schedule.[Delivery Sequence], PD_Delivery_Schedule.[Delivery Date/Time], PD_Delivery_Schedule.Truck, IIf([PD_Delivery_Schedule].[Special Delivery Inst]>' ',[PD_Delivery_Schedule].[Special Delivery Inst],[PD_Mill_Start].[Special Delivery Inst]) AS [Special Delivery Inst], PD_Delivery_Schedule.[COD Over Ride], PD_Mill_Start.Batch, PD_Mill_Start.[Stain Grade/Paint Grade], PD_Mill_Start.Species, PD_Mill_Start.[Stave Core], PD_Delivery_Schedule.[Mill Start Sent], PD_Delivery_Schedule.[Mill Start Confirmed], PD_Mill_Start.[Last Of Door Desc], PD_Mill_Start.[Ship Via], IIf([PD_Mill_Start].[Job Name] Like '%glass%' Or [PD_Mill_Start].[Job Name] Like '%hinge%' Or [PD_Mill_Start].[Job Name] Like '%weather%' Or [PD_Mill_Start].[Job Name] Like '%molding%' Or [PD_Mill_Start].[Style] Like '%N/A%' Or [PD_Mill_Start].[Interior or Exterior] Like '%other%',[Batch Door Count],0) AS [Del Other Qty], IIf([Batch Jamb Count] Is Not Null,[Batch Jamb Count],0) AS [Del Jamb Qty], IIf([Batch Door Count] Is Null,0,IIf([PD_Mill_Start].[Interior or Exterior] Like '%case%' Or [Style] Like '%case%',0,[Batch Door Count]-[Del Other Qty])) AS [Del Door Qty] 
FROM PD_Mill_Start LEFT JOIN PD_Delivery_Schedule ON PD_Mill_Start.[Order Number] = PD_Delivery_Schedule.[Order Number] 
WHERE PD_Mill_Start.[Order Number]='350844' 
ORDER BY PD_Mill_Start.[Order Number] DESC; 

ошибки Msg 207, уровень 16, состояние 1, строка 1 Неверное имя столбца 'Del Другой Кол-во.

+0

Я бы уменьшил запрос до одного элемента select и посмотрел, разрешает ли он проблему. Затем вы можете добавить каждую часть назад, пока она не выкинет ошибку. В противном случае совместим с IIF в вашей версии sql-сервера? Не знаете, какую версию вы используете. – Shawn

+0

[PD_Mill_Start]. [Интерьер или экстерьер] - Я не уверен, но я думаю, что это может быть преступником. – rwking

+0

Errr .... это часть вашего реального кода 'IIf'? Если это так, синтаксис - 'if', а не 2 i. Если это не синтаксис, о котором я не знаю. –

ответ

1

Вы не можете использовать «полученные/псевдонимами» столбцы в запросе на выборку в расчетах в том же запросе ... я не знаю, если те правильные слова, но учтите:

declare @table table (val1 int, val2 int) 

insert into @table (val1, val2) 
values (5,10) 

select 
    val1, -- 5 
    val2, -- 10 
    val1*val2 as val3, -- this works, 50 
    val3+1 as val4 -- this does not work, you probably expect 51. 
from @table 

Вы можете сделать это (среди прочего)

select val1, val2, val3, 
val3+1 as val4 -- this now works, returns 51 
from (
    select 
     val1, 
     val2, 
     val1*val2 as val3, -- this works, 50 
    from @table 
) thingy 

другой вариант:

select 
    val1, 
    val2, 
    val3, 
    val3+1 as val4 
from @table 
cross apply (select val1 * val2 as val3) thing 

Извините, я не знаю правильной терминологии для этих понятий. Важная часть состоит в том, что вы не можете использовать столбец «производный/сглаженный» как часть вычисления внутри одного и того же запроса выбора - это то, что вы пытаетесь сделать в своем запросе [Batch Door Count]-[Del Other Qty]. Если вы реорганизовываете свой запрос, используя идеи сверху, у вас больше не будет проблемы. Я пытаюсь работать над этим сейчас, но этот запрос довольно громоздкий.

+0

Спасибо Kritner ... Я переписал его, чтобы выполнить математику после запроса, и все хорошо! –