2013-11-28 3 views
0

Как выбрать custType в разделе предиката запроса Я не могу сделать это сейчас, потому что Код ошибки -1, состояние SQL 42X04: Столбец CUSTTYPE либо не находится в любая таблица в списке FROM или появляется в спецификации соединения и выходит за пределы спецификации соединения или появляется в предложении HAVING и не находится в списке GROUP BY. Если это оператор CREATE или ALTER TABLE, то «CUSTTYPE» не является столбцом в целевой таблице.Столбец в предикате SQL

select p.SKU AS GiftID, p.ProductName AS GiftName, 
     case when sa.Sales >= v.LevelUpAmount then 1 else 2 end AS custType 
     from products p, campaign ca, SubCategory sc, 
      VIPLevelUpParam v, 
      ActiveParam a, customer c, 
      (select c.CustomerCode, sum(od.NetSales) AS Sales from customer c 
       INNER JOIN orders o ON (c.CustomerCode = o.CustomerCode) 
       INNER JOIN order_details od ON (o.OrderCode = od.OrderCode) 
        group by c.CustomerCode) sa        
       where ca.CUSTOMERTYPE = custType AND 
       c.CustomerCode = 'CUS000001-2013-11-06' AND 
       p.SubCategoryID = sc.SubCategoryCode AND 
       p.SKU = ca.GiftID AND 
       sc.SubCategoryName = 'Gift'AND 
       v.LevelUpID = a.ActiveID AND 
       a.TableName = 'VIPLevelUpParam' 
       group by p.SKU, p.ProductName, sa.Sales, v.LevelUpAmount, custType; 

Любой человек пролить свет на это, был бы благодарен!

+0

Я не считаю, что внутренний SQL видит внешний SQL в '' CUSTTYPE'' Defenition – nrathaus

ответ

0

В соответствии с процедурой обработки запроса, где предложение оценивается перед выражением выбора, то почему вы получаете столбец CustType, не будет доступен в условии where.

http://blog.sqlauthority.com/2009/04/06/sql-server-logical-query-processing-phases-order-of-statement-execution/

select * from 
(
select p.SKU AS GiftID, p.ProductName AS GiftName, 
     case when sa.Sales >= v.LevelUpAmount then 1 else 2 end AS custType 
     from products p, campaign ca, SubCategory sc, 
      VIPLevelUpParam v, 
      ActiveParam a, customer c, 
      (select c.CustomerCode, sum(od.NetSales) AS Sales from customer c 
       INNER JOIN orders o ON (c.CustomerCode = o.CustomerCode) 
       INNER JOIN order_details od ON (o.OrderCode = od.OrderCode) 
        group by c.CustomerCode) sa 
) DT 
where DT.CUSTOMERTYPE = DT.custType AND 
       DT.CustomerCode = 'CUS000001-2013-11-06' AND 
       DT.SubCategoryID = DT.SubCategoryCode AND 
       DT.SKU = DT.GiftID AND 
       DT.SubCategoryName = 'Gift' AND 
       DT.LevelUpID = DT.ActiveID AND 
       DT.TableName = 'VIPLevelUpParam' 
       group by DT.SKU, DT.ProductName, DT.Sales, DT.LevelUpAmount, DT.custType; 
+0

Большое спасибо за спасителя, я должен остаться на ночь. – user3024062

Смежные вопросы