如果我有一个子查询,它执行以下操作;
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子句。
答案 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%确定你真正想要实现的目标。您是否拥有一组样本数据,包含您想要的结果,以及结果与来源相关的解释?