多个子查询和条件

时间:2011-09-14 15:51:00

标签: sql sql-server-2005

如果我有一个子查询,它执行以下操作;

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 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

我并不是100%确定你真正想要实现的目标。您是否拥有一组样本数据,包含您想要的结果,以及结果与来源相关的解释?