2013-09-25 66 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