Несколько подзапросов и условий - PullRequest
0 голосов
/ 14 сентября 2011

Если у меня есть подзапрос, который выполняет следующее:

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 ]

2 голосов
/ 14 сентября 2011

Вам необходимо использовать оператор 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 голос
/ 14 сентября 2011

Чтобы использовать агрегирующие функции, такие как 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%, чего вы на самом деле хотите достичь.У вас есть примерный набор данных с желаемыми результатами и объяснением того, как результаты связаны с источником?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...