2013-09-25 65 views
2
ALTER View Myview AS 

(SELECT 
     TOP 1 ORGANIZATION_id 
    FROM ORGANIZATION 
    WHERE code = mo.FunctionCode) org_id, 
(SELECT 
     TOP 1 ID 
    FROM DEPARTMENT 
    WHERE [NAME] = mo.Code) dep_id, 
(SELECT 
     TOP 1 Name 
    FROM DEPARTMENT 
    WHERE [ID] = dep_id) Dep_Name, 
(SELECT 
     TOP 1 Org_Name 
    FROM CA_ORGANIZATION 
    WHERE [organization_id] = org_id) Org_Name, 
(CASE  
    WHEN Dep_Name = 'sales' AND Org_Name = 'Advanture' 
     THEN 'salesTeam' 
    WHEN Dep_Name ! = 'Sales' AND Org_Name = 'External' 
     THEN 'ExternalTeam' 
    ELSE 
     'DefaultTeam' 
    END) type 

    FROM detail_view dv 
    LEFT OUTER JOIN Global_oganization mo ON mo.area =dv.code 

错误而改变的观点是SQL case语句

Invalid column name 'Dep_Name'. 
Msg 207, Level 16, State 1, Procedure myview, 
Invalid column name 'Org_Name'. 
Msg 207, Level 16, State 1, Procedure myview, 
Invalid column name 'Dep_Name'. 
Msg 207, Level 16, State 1, Procedure myview, 
Invalid column name 'Org_Name'. 

我已经写CASE语句来验证部门名称和组织名称来决定的类型。

帮我解决这个错误。

+0

在情况下,使用括号尝试 - >'WHEN(Dep_Name <> '销售' AND ORG_NAME = '外部')THEN“ExternalTeam '' –

+0

注意:'CASE'是一个*表达*,而不是*语句*。 –

回答

3

尝试这一个 -

ALTER VIEW dbo.Myview 
AS 
    SELECT /*missing in your query*/ 
      t.org_id 
     , t.dep_id 
     , t.Dep_Name 
     , t.Org_Name 
     , [type] = 
      CASE 
       WHEN Dep_Name = 'sales' AND Org_Name = 'Advanture' THEN 'salesTeam' 
       WHEN Dep_Name != 'Sales' AND Org_Name = 'External' THEN 'ExternalTeam' 
       ELSE 'DefaultTeam' 
      END 
    FROM (
     SELECT org_id = (
        SELECT TOP 1 ORGANIZATION_id 
        FROM dbo.ORGANIZATION 
        WHERE Code = mo.FunctionCode 
       ) 
      , dep_id = (
        SELECT TOP 1 ID 
        FROM dbo.Department 
        WHERE [name] = mo.Code 
       ) 
      , Dep_Name = (
        SELECT TOP 1 name 
        FROM dbo.Department 
        WHERE [ID] = dep_id 
       ) 
      , Org_Name = (
        SELECT TOP 1 Org_Name 
        FROM dbo.CA_ORGANIZATION 
        WHERE [organization_id] = org_id 
       ) 
     FROM dbo.detail_view dv 
     LEFT JOIN dbo.Global_oganization mo ON mo.area = dv.Code 
    ) t 
+1

我想知道缺少'SELECT',但是如果你尝试创建一个没有“领先”SELECT的视图,应该在'FROM'中得到一个错误,但是OP没有写这个...... uhm奇怪 – DrCopyPaste

+0

@bluefeet你是对的。请参阅最新的答案。 – Devart

2

尝试此

SELECT t.*,(CASE  
       WHEN t.Dep_Name = 'sales' AND t.Org_Name = 'Advanture' THEN 'salesTeam' 
       WHEN t.Dep_Name ! = 'Sales' AND t.Org_Name = 'External' THEN 'ExternalTeam' 
       ELSE 'DefaultTeam' 
       END) type 

FROM (
(select top 1 ORGANIZATION_id from ORGANIZATION 
            where code = mo.FunctionCode) org_id, 
     (select top 1 ID from DEPARTMENT 
            where [NAME] = mo.Code) dep_id, 
     (SELECT top 1 Name FROM DEPARTMENT 
            WHERE [ID] = dep_id) Dep_Name, 
     (SELECT TOP 1 Org_Name FROM CA_ORGANIZATION 
           WHERE [organization_id] = org_id) Org_Name 


       From detail_view dv 
       Left outer join Global_oganization mo on mo.area =dv.code) t 
+0

+1 - 好的答案。 – Devart