2017-01-25 87 views
0

我一直在研究查詢,因此在子查詢中,我在特定條件下選擇列Cust_Status子查詢在case語句中返回多於1行

select distinct 
    C.Cust_Code [Cust #], 
    C.Cust_Start_Date [Start Date], 
    C.Cust_End_date [End Date], 
    (select 
     Cust_Status = (case 
          when cast(CUST_UPDATE_DATE_LT as DATE) = cast('2017-01-23 00:00:00' as Date) 
           then 'V' 
          when cast(CUST_UPDATE_DATE_LT as DATE) = cast('2017-01-22 00:00:00' as Date) 
           then 'I' 
         end) 
    from tblCustomers) [Cust Status], 
    M.Machine_ID, 
    M.Machine_Location 
from 
    tblCustomers C 
inner join 
    tblMachine M on C.Cust_Mach_Pkey = M.Pkey 

當我運行此查詢,我得到一個錯誤

子查詢返回的多個值誤差。

當我刪除子查詢內的情況下,它很好。但我相信在兩個日期條件下只有1條記錄。所以不知道我的子查詢如何返回多個值。請賜教。

+1

(1)用你正在使用的數據庫標記你的問題。 (2)提供樣本數據和期望的結果。 (3)解釋你試圖實施的邏輯。 –

+0

@戈登:發表一個3分的問題要求提供額外的細節,然後發佈一個否定提供它們的需求或動機的答案是沒有意義的。 –

+0

你正在使用哪些DBMS?顯示的代碼無效(標準)SQL。 –

回答

0

我猜你只是想比較最新的日期。如果是這樣,有更簡單的方法:

select C.Cust_Code as [Cust #], C.Cust_Start_Date as [Start Date], 
     C.Cust_End_date as [End Date], 
     (case when max(cast(CUST_UPDATE_DATE_LT as DATE)) = '2017-01-23' 
      then 'V' 
      when max(cast(CUST_UPDATE_DATE_LT as DATE)) = '2017-01-22' 
      then 'I' 
     end) as Cust_status 
     M.Machine_ID, 
     M.Machine_Location 
from tblCustomers C inner join 
    tblMachine M 
    on C.Cust_Mach_Pkey = M.Pkey 
group by C.Cust_Code, C.Cust_Start_Date, C.Cust_End_date, 
     M.Machine_ID, M.Machine_Location 
+0

感謝您的回答。但我正在尋找一個答案,如果我在selet語句中的子查詢返回多於一行,可以解決什麼問題?例如,選擇C.Cust_Code as [Cust#],C.Cust_Start_Date as [Start Date], C.Cust_End_date as [End Date], (max(cast(CUST_UPDATE_DATE_LT as DATE))='2017-01- 23' 然後'V' 當max(cast(CUST_UPDATE_DATE_LT as DATE))='2017-01-22' 然後'I' end)作爲來自tblCustomers的Cust_status。 如何避免這個子查詢返回超過1個值的錯誤。在select語句中我不能使用IN – LT268