2013-05-31 5 views
0

Здравствуйте и спасибо, что посмотрели.Компонентный запрос SQL Server

Я написал простую заявку для своей команды софтбола, и у меня возникли некоторые проблемы с запросом, который мне нужно переписать.

SELECT DISTINCT 
    _StartDate, _RescheduleDate, _GameTime, _FieldNumber, _Notes 
FROM 
    _Schedule 
WHERE 
    (_StartDate >= DATEADD(wk, 0, { fn NOW() })) 
    AND (_StartDate < DATEADD(wk, 1, { fn NOW() })) 

Этот запрос просто получает расписание предстоящих недельных игр. Что мне нужно сделать, и я забыл, должен был также проверить на _RescheduleDates у нас в настоящее время есть 1 или 2 игры, которые перенесены. Поэтому мне нужно изменить это, чтобы проверить, имеет ли дата переноса дату, а не «TBD» или NULL.

Вторая проблема заключается в том, что наши игры находятся в пятницу, в день игры, это изменяет данные на веб-сайте до следующей недели игры, и мне нужно, чтобы она не менялась до дня после игры, которая является субботой. Я попытался добавить 1 день

(wk, 1 +1d {fn NOW() })) 

Но, очевидно, это не сработало. Поэтому я, несомненно, буду признателен за помощь в этом.

ответ

0

Можете ли вы показать нам желаемый результат от установки как таковой:

declare @_Schedule table (_StartDate datetime, _RescheduleDate datetime, _GameTime datetime, _FieldNumber int, _Notes varchar(10)) 
insert into @_Schedule 
    select '2013-05-31', null,   '10:30:00', 1, '...' union all 
    select '2013-06-02', '2013-06-03', '10:30:00', 1, '...' union all 
    select '2013-06-04', null,   '10:30:00', 1, '...' union all 
    select '2013-06-05', null,   '10:30:00', 1, '...' 


SELECT DISTINCT 
    _StartDate, _RescheduleDate, _GameTime, _FieldNumber, _Notes 
FROM 
    @_Schedule 
WHERE 
    (_StartDate >= DATEADD(wk, 0, getdate())) 
    AND (_StartDate < DATEADD(wk, 1, getdate())) 
0

Что должно произойти, когда вы «проверка» значение _RescheduleDate?

Если вы хотите еще один запрос для только перенесенной игры, так что вы можете иметь это на отдельной странице или в разделе сайта, просто измените ИНЕКЕ

SELECT DISTINCT 
    _StartDate, _RescheduleDate, _GameTime, _FieldNumber, _Notes 
FROM 
    _Schedule 
WHERE 
    (_StartDate >= DATEADD(wk, 0, { fn NOW() })) 
    AND (_StartDate < DATEADD(wk, 1, { fn NOW() })) 
    AND _RescheduleDate IS NOT NULL 
    AND _RescheduleDate <> 'TBD' 

В противном случае оператор СЛУЧАЙ будет в состоянии " check "для значения при выборе значений.

SELECT DISTINCT 
    _StartDate 
, CASE 
    WHEN _RescheduleDate IS NULL THEN '' 
    WHEN _RescheduleDate = 'TBD' THEN '' 
    ELSE --do something with the valid datetime 
    END AS _RescheduleDate 
, _GameTime, _FieldNumber, _Notes 
0

Я как бы хотел, чтобы он был включен в текущее заявление. Я знаю, что возможно, я просто не уверен, как это сделать. На странице расписания нужно показать все игры, которые будут воспроизводиться, включая регулярные запланированные игры, а также перенесенные игры.

Nathan Я думаю, вы на что-то .. выберите результаты, такие как «формат данных» для перенесенных игр. Вы знаете, как создать составную инструкцию select? Я попытался найти пример в Интернете и еще не нашел одного из них.

1
select 
    _StartDate, _RescheduleDate, _GameTime, _FieldNumber, _Notes 
from (
    select distinct 
     _NewDate = coalesce(nullif(_RescheduleDate,'TBD'),_StartDate) 
     ,_StartDate 
     ,_RescheduleDate 
     ,_GameTime 
     ,_FieldNumber 
     ,_Notes 
     from _Schedule 
    ) sch 
where (_NewDate >= cast(getdate() as date)) 
    and (_NewDate < dateadd(wk, 1, getdate())) 

Ваши «игры падают на день раньше» вопрос, потому что вы сравниваете текущее время на сегодняшний день - так считается, что компонент времени, чтобы быть 00:00:00.000. Вот почему вы увидите советы по сохранению даты начала и времени начала в отдельных столбцах. Обратите внимание: cast(getdate() as date) требует SQL 2008 или выше; используйте cast(floor(cast(getdate() as float)) as datetime) для более ранних версий.

http://sqlfiddle.com/#!3/9d171/5/0