2011-09-14 39 views
-1

如果我有一個子查詢執行以下操作;多個子查詢和條件

Select 
    Min(S_Date) 
, Col1 
, Col2 
From 
(
    Select Dateadd(whatever) as S_Date, Userid 
    from tbl1 as t 
    where S_Date >'today' 
) 

如何添加另一個子句,以便只有在滿足其他條件時才選擇Col1的值,即col3 ='doit'。我想我很難理解如何在子查詢中的不同位置使用兩個where子句。

回答

2

你需要使用一個CASE語句:

SELECT 
    s_date 
    ,CASE Col3 WHEN 'doit' THEN Col1 ELSE Col2 END AS selection 
FROM (
    SELECT 
     Sdate 
     , Col1 
     , Col2 
     , Col3 
    FROM foo 
    WHERE s_Date > GETDATE() 
) AS sub 
+0

我編輯我原來的問題,因爲我忘了把重要的部分,這是我想要的最小(日期)。我嘗試過使用一個案例,但是如果條件不符合,它會給我一個null,當我真的想要取第一個「doit」的最小值(日期)時。 – Jessica

+0

你能發佈你正在使用的整個查詢嗎?看起來您需要在子查詢中執行min(日期),然後在外部查詢中對這些結果使用CASE語句。 – Wil

1

中使用聚合功能,如MIN(),你需要用你不聚集列組...

Select 
    Min(S_Date) 
, Col1 
, Col2 
From 
    (
    Select Dateadd(whatever) as S_Date, Userid 
    from tbl1 as t 
    where S_Date >'today' 
) 
GROUP BY 
    Col1, 
    Col2 

如果您然後希望非聚合列是有條件的,您再次按那些條件值進行分組...

Select 
    Min(S_Date) 
, CASE WHEN col3 = 'doit' THEN Col1 ELSE Col2 END AS conditional_field 
From 
    (
    Select Dateadd(whatever) as S_Date, Userid 
    from tbl1 as t 
    where S_Date >'today' 
) 
GROUP BY 
    CASE WHEN col3 = 'doit' THEN Col1 ELSE Col2 END 

I'米不是100%確定你實際上想達到什麼。您是否有一組樣本數據和您想要的結果,並解釋結果與來源的關係?