2017-01-25 3 views
0

サブクエリで特定の条件の下で列Cust_Statusを選択しているクエリを処理しています。私はこのクエリを実行するとサブステートメントでcase文の中に2つ以上の行が返されました

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つ以上の値を返す方法についてはわかりません。私を教えてください。

+1

(1)使用しているデータベースで質問をタグ付けしてください。 (2)サンプルデータと所望の結果を提供する。 (3)実装しようとしている論理を説明してください。 –

+0

@Gordon: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ステートメントのサブクエリが1行以上を返すかどうかの答えを探していますが、何が解決策ですか?たとえば、Cust_Codeを[Cust#]、C.Cust_Start_Dateを[開始日]、 [終了日]、 (最大の場合(キャスト(CUST_UPDATE_DATE_LT))= '2017-01- 23 ' ' V ' max(キャスト(DUST)のCUST_UPDATE_DATE_LT)=' 2017-01-22 ' の場合は' end)はtblCustomersのCust_statusになります。 このサブクエリが1つ以上の値を返すのを避けるにはどうすればいいですか?select文ではIN – LT268

関連する問題