Использование значения столбца для выбора другого столбца в SQL - PullRequest
0 голосов
/ 07 апреля 2011

У меня есть БД MSSQL 2000 с таблицей, к которой мне нужно выполнить запрос. Он имеет столбец «ШАГ» и столбцы «ДАТА1», «ДАТА2» ... «ДАТА7». При выполнении определенного сценария он обновляет столбец «DATE $ step» и увеличивает значение «STEP» на единицу (при необходимости оборачивая).

Я пытаюсь создать запрос, который возвращает строки с последней датой, например, «DATE3», если «STEP» = 4, старше X дней, но я немного озадачен тем, как сделать этот запрос.

Ответы [ 3 ]

3 голосов
/ 07 апреля 2011

Как то так?

SELECT
  [DateColumn]=CASE STEP WHEN 1 THEN DATE1 
WHEN 2 THEN DATE2
WHEN 3 THEN DATE3
ELSE DATE4 END
FROM <Table>
1 голос
/ 07 апреля 2011
 Select MyTable.* from MyTable INNER JOIN
     (Select tableID, CASE STEP
                WHEN 7 THEN DATE6   -- The STEP column increments are done 
                WHEN 6 THEN DATE5   -- *after* updating the date, therefore
                WHEN 5 THEN DATE4   -- the last update date is in Date[STEP-1]
                WHEN 4 THEN DATE3
                WHEN 3 THEN DATE2
                WHEN 2 THEN DATE1
                WHEN 1 THEN DATE7   -- Rollover (special case)
             END AS LastDate
     From MyTable
     -- DATEDIFF Returns the count (signed integer) of the specified 
     --          datepart boundaries crossed. I therefore use seconds
     --          to get predicable results regardless of execution time.
     --          (86400 seconds in a day)
     WHERE DATEDIFF('s',LastDate,getdate()) > 
                    (86400 * @DaysParameter)) as dateResult           
     ON MyTable.tableID = dateResult.tableID
1 голос
/ 07 апреля 2011
select Step, [Date]
from 
  (select 
    Step,
    case Step
      when 1 then Date1
      when 2 then Date2
      when 3 then Date3
      when 4 then Date4
      when 5 then Date5
      when 6 then Date6
      when 7 then Date7
    end as [Date]
  from YourTable) as T
where datediff(d, T.[Date], getdate()) > @XDays
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...