2016-01-22 104 views
0

我們需要創建視圖,因爲我們正在將數據遷移到新系統中。在創建這個視圖時,我需要創建一個子查詢,在這個子查詢中表引用它自己來提取父組織信息。我創建了查詢作爲一個獨立的,它工作正常,但是當我把它放入視圖,並對視圖做select *時,我得到錯誤消息「子查詢返回多個值,這是不允許的,當子查詢如下=,!=,<,< =,>,> =或者當子查詢用作表達式時。「創建視圖時select語句內的子查詢

以下是我當前的查看創建語句。

CREATE view [dbo].[Altai_V_Account] as 
SELECT cast(N.ID as nvarchar) as altai_legacymemberid, 
     RTRIM (n.company) as name, 
     RTRIM (cd.aha) as aha_memberID, 
     RTRIM (n.member_type) as altai_base_customertypeid, 
     RTRIM (na.ADDRESS_1) as address1_line1, 
     RTRIM (na.ADDRESS_2) as address1_line2, 
     RTRIM (na.city) as address1_city, 
     RTRIM (na.state_province) as address1_stateorprovince, 
     RTRIM (na.zip) as address1_postalcode, 
     RTRIM (n.Fax) as fax, 
     RTRIM (n.WORK_PHONE) as telephone1, 
     RTRIM (cd.FTE) as numberofemployees, 
     RTRIM (n.co_id) as ParentAccountID, 
     RTRIM (n.website) as websiteurl, 
     RTRIM (cd.LICENSED_BEDS) as gha_bedcalculation, 
     (select CompN.COMPANY 
      From Name as n inner join Name as CompN on n.CO_ID=CompN.ID 
       Where n.CO_ID=CompN.id 
       and n.STATUS='A' 
      and (n.MEMBER_TYPE ='HCE' 
        or n.MEMBER_TYPE ='I' 
        or n.MEMBER_TYPE ='SA' 
        or n.MEMBER_TYPE ='SI' 
        or n.MEMBER_TYPE ='SM' 
        or n.MEMBER_TYPE ='SPON' 
        or n.MEMBER_TYPE ='SYS' 
        or n.MEMBER_TYPE ='VP' 
        or n.MEMBER_TYPE ='VPA' 
        or n.MEMBER_TYPE ='ASC' 
        or n.MEMBER_TYPE = 'C' 
        or n.MEMBER_TYPE = 'HCS' 
        or n.MEMBER_TYPE = 'NH' 
        or n.MEMBER_TYPE = 'NMI')) as parentaccount 


FROM Name as N 
    inner join Company_Demo as cd on N.id=cd.ID 
    inner join Name_Address as na on N.ID=NA.ID 
WHERE N.MEMBER_TYPE ='HCE' 
or N.MEMBER_TYPE ='I' 
or N.MEMBER_TYPE ='SA' 
or N.MEMBER_TYPE ='SI' 
or N.MEMBER_TYPE ='SM' 
or N.MEMBER_TYPE ='SPON' 
or N.MEMBER_TYPE ='SYS' 
or N.MEMBER_TYPE ='VP' 
or N.MEMBER_TYPE ='VPA' 
or N.MEMBER_TYPE ='ASC' 
or N.MEMBER_TYPE = 'C' 
or N.MEMBER_TYPE = 'HCS' 
or N.MEMBER_TYPE = 'NH' 
or N.MEMBER_TYPE = 'NMI' 
and na.STATUS='A' 

謝謝!

更新:我不是「SQL」人員,但我們在組織中沒有人員。我基本上使用我們的遷移公司提供給我的代碼示例。我不知道名字表爲什麼叫做名字,我們目前使用的軟件的設計者現在是這樣命名的。

對於這個特定的子查詢,記錄列表母公司的ID號(co_ID),但不是公司的名稱。我想讓查詢看到CO_ID字段,然後將公司名稱附屬公司拉到該ID。它作爲一個普通的查詢,而不是作爲一個子查詢。

+0

這絕對是一個奇怪的查詢。您正在訪問相同的表三次,這可能是可以避免的。你修剪所有的領域,甚至ID,我想知道爲什麼他們甚至被允許進入數據庫時​​,空間打擾你。而你使用硬編碼值的成員類型,你應該更好地從某個表中獲得該組。最後,子查詢與主查詢無關,因此始終選擇相同的值。在你的情況下值** s **,這就是爲什麼你會得到錯誤。 –

+0

'名稱'是一個表格的奇怪名稱。它包含什麼?公司?那麼爲什麼它不是被稱爲「公司」呢?它是分層的(遞歸)不知何故?爲什麼?什麼級別代表?層次結構中是否有最大數量的層次?如果你解釋了你的查詢應該做什麼,這可能會有幫助,所以我們可以給你一些建議。 –

回答

0

問題是,當您使用子查詢來代替列時,它應該返回標量結果。那就是它應該返回一行和一列。

在你的情況下,子查詢將返回多個行或列。請先單獨嘗試子查詢,以檢查是否重新調整標量值。