2011-09-14 22 views
-1

次のようなサブクエリがある場合は、別の条件が満たされた場合のCol1から、その値のみ選択されているので、私はすなわちcol3という=「のdoIt」、別の句を追加するにはどうすればよい複数のサブクエリと条件

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

。サブクエリの異なる場所で2つのwhere節を使用する方法を理解するのが難しいと思います。

答えて

2

あなたはCASE文を使用する必要があります:あなたは集計していない列によってグループに必要)MIN(のような集計関数を使用するには

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

私はMin(日付)がほしいという重要な部分を入れるのを忘れてしまったので、私は元の質問を編集します。私はケースを使用しようとしましたが、条件が満たされなければ、最初の 'doit'のmin(日付)を取ることを本当に望むとき、それは私にヌルを与えます。 – Jessica

+0

作業しているクエリ全体を投稿できますか?サブクエリ内でmin(日付)を実行し、その結果の外部クエリでCASEステートメントを使用する必要があるかのように見えます。 – Wil

1

を...

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%確かではありません。あなたが望む結果を持つデータのサンプルセットと、その結果がソースとどのように関係しているのかについての説明がありますか?