Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 нужна помощь со скриптом  [new]
zaknafein
Member

Откуда:
Сообщений: 64
Здравствуйте уважаемые люди. Нужна помощь в модификации скрипта. есть такой скрипт
CASE WHEN dbo.WORKTIMEREPORT.WORKTIME IS NOT NULL THEN dbo.WORKTIMEREPORT.WORKTIME ELSE 0 END AS WORKTIME, 
                      CASE WHEN dbo.WORKTIMEREPORT.NOWORKTIME IS NOT NULL THEN dbo.WORKTIMEREPORT.NOWORKTIME ELSE 0 END AS NOWORKTIME, 
                      CASE WHEN dbo.WORKTIMEREPORT.FULLTIME IS NOT NULL THEN dbo.WORKTIMEREPORT.FULLTIME ELSE 0 END AS FULLTIME, 
                      dbo.WORKTIMEREPORT.ENTERDATE, dbo.WORKTIMEREPORT.EXITDATE, dbo.WORKTIMEREPORT.PERSONID, dbo.WORKTIMEREPORT.DATE, 
                      CASE WHEN dbo.NORMATIVESCHEDULE.STANDARDTIME IS NOT NULL THEN dbo.NORMATIVESCHEDULE.STANDARDTIME WHEN DATEPART(WEEKDAY, 
                      dbo.WORKTIMEREPORT.DATE) = 6 OR
                      DATEPART(WEEKDAY, dbo.WORKTIMEREPORT.DATE) = 7 THEN 0 WHEN DATEPART(WEEKDAY, dbo.WORKTIMEREPORT.DATE) 
                      = 5 THEN 7 ELSE 8.25 END AS STANDARDTIME

Сейчас это работает так: заполняем поле дата, и поле STANDARDTIME, и далее в отчете используется не стандартное, а введенное STANDARDTIME для указанной даты.
Мне нужно сюда добавить проверку по полю TABLENO. Если оно не равно 0, то для записи с этим TABLENO в поле STANDARDTIME изменить значение на введенное. Помогите пожалуйста.
24 июл 15, 14:09    [17930087]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2414
zaknafein,

CASE 
 WHEN TABLENO <> 0 THEN ВВЕДЕННОЕ
 

WHEN dbo.WORKTIMEREPORT.WORKTIME IS NOT NULL THEN dbo.WORKTIMEREPORT.WORKTIME ELSE 0 END AS WORKTIME, 
                      CASE WHEN dbo.WORKTIMEREPORT.NOWORKTIME IS NOT NULL THEN dbo.WORKTIMEREPORT.NOWORKTIME ELSE 0 END AS NOWORKTIME, 
                      CASE WHEN dbo.WORKTIMEREPORT.FULLTIME IS NOT NULL THEN dbo.WORKTIMEREPORT.FULLTIME ELSE 0 END AS FULLTIME, 
                      dbo.WORKTIMEREPORT.ENTERDATE, dbo.WORKTIMEREPORT.EXITDATE, dbo.WORKTIMEREPORT.PERSONID, dbo.WORKTIMEREPORT.DATE, 
                      CASE WHEN dbo.NORMATIVESCHEDULE.STANDARDTIME IS NOT NULL THEN dbo.NORMATIVESCHEDULE.STANDARDTIME WHEN DATEPART(WEEKDAY, 
                      dbo.WORKTIMEREPORT.DATE) = 6 OR
                      DATEPART(WEEKDAY, dbo.WORKTIMEREPORT.DATE) = 7 THEN 0 WHEN DATEPART(WEEKDAY, dbo.WORKTIMEREPORT.DATE) 
                      = 5 THEN 7 ELSE 8.25 END AS STANDARDTIME
24 июл 15, 14:28    [17930302]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
zaknafein
Member

Откуда:
Сообщений: 64
StarikNavy,
я наверно не понятно написал. сейчас если поле standardtime не заполнено, то оно принимает значение 8.25. Если я заполнил поле standardtime, то в отчете принимается значение которое я ввел в это поле и на ту дату которую ввел. мне нужно сделать изменение standardtime для конкретной записи с введенным tableno, а не для даты. т.е ввожу в поле tableno например 123, а в поле standardtime 6. в итоге в отчете должно быть, что у пользователя чей таб номер равен 123, standardtime буде ровно 6, а не стандартному значению 8.25
24 июл 15, 14:44    [17930447]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8807
zaknafein,

declare @tn int = 123, @worktime = 6
select * from tbl1 where tableno = @tn and standardtime = isnull(@worktime, 8.25)
24 июл 15, 17:29    [17931581]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
zaknafein
Member

Откуда:
Сообщений: 64
CREATE VIEW [dbo].[PersonWorkTimeReport]
AS
SELECT                CASE WHEN dbo.WORKTIMEREPORT.WORKTIME IS NOT NULL THEN dbo.WORKTIMEREPORT.WORKTIME ELSE 0 END AS WORKTIME, 
                      CASE WHEN dbo.WORKTIMEREPORT.NOWORKTIME IS NOT NULL THEN dbo.WORKTIMEREPORT.NOWORKTIME ELSE 0 END AS NOWORKTIME, 
                      CASE WHEN dbo.WORKTIMEREPORT.FULLTIME IS NOT NULL THEN dbo.WORKTIMEREPORT.FULLTIME ELSE 0 END AS FULLTIME, 
                      dbo.WORKTIMEREPORT.ENTERDATE, dbo.WORKTIMEREPORT.EXITDATE, dbo.WORKTIMEREPORT.PERSONID, dbo.WORKTIMEREPORT.DATE, 
                      CASE WHEN dbo.NORMATIVESCHEDULE.STANDARDTIME is NOT NULL THEN dbo.NORMATIVESCHEDULE.STANDARDTIME 
					  WHEN DATEPART(WEEKDAY, 
                      dbo.WORKTIMEREPORT.DATE) = 6 OR
                      DATEPART(WEEKDAY, dbo.WORKTIMEREPORT.DATE) = 7 THEN 0 WHEN DATEPART(WEEKDAY, dbo.WORKTIMEREPORT.DATE) 
                      = 5 THEN 7 ELSE 8.25 END AS STANDARDTIME,
					 [color=red] case when dbo.PersonStatusReport.STATUS = 1 then dbo.PersonWorkTimeReport.STANDARDTIME = dbo.NORMATIVEEMPLOYEES.STANDARDTIME else dbo. end as STANDARDTIME[/color]
					  

FROM         dbo.WORKTIMEREPORT LEFT OUTER JOIN
                      dbo.NORMATIVESCHEDULE ON dbo.WORKTIMEREPORT.DATE = dbo.NORMATIVESCHEDULE.DATE [color=red]LEFT OUTER JOIN
					  dbo.NORMATIVEEMPLOYEES[/color] 


Ребят, помогайте! чет ниче не получается у меня... Все что я дописал красным выделил... задача такая: если dbo.PersonStatusReport.STATUS = 1, то PersonWorkTimeReport.STANDARDTIME присвоить значение dbo.NORMATIVEEMPLOYEES.STANDARDTIME. но компилятор показывает ошибки...
27 июл 15, 12:40    [17938618]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
Glory
Member

Откуда:
Сообщений: 104751
zaknafein
но компилятор показывает ошибки...

А что это вы за синтаксис придумали - then dbo.PersonWorkTimeReport.STANDARDTIME = dbo.NORMATIVEEMPLOYEES.STANDARDTIME ?

Сообщение было отредактировано: 27 июл 15, 12:43
27 июл 15, 12:43    [17938641]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
zaknafein
CREATE VIEW [dbo].[PersonWorkTimeReport]
AS
SELECT                CASE WHEN dbo.WORKTIMEREPORT.WORKTIME IS NOT NULL THEN dbo.WORKTIMEREPORT.WORKTIME ELSE 0 END AS WORKTIME, 
                      CASE WHEN dbo.WORKTIMEREPORT.NOWORKTIME IS NOT NULL THEN dbo.WORKTIMEREPORT.NOWORKTIME ELSE 0 END AS NOWORKTIME, 
                      CASE WHEN dbo.WORKTIMEREPORT.FULLTIME IS NOT NULL THEN dbo.WORKTIMEREPORT.FULLTIME ELSE 0 END AS FULLTIME, 
                      dbo.WORKTIMEREPORT.ENTERDATE, dbo.WORKTIMEREPORT.EXITDATE, dbo.WORKTIMEREPORT.PERSONID, dbo.WORKTIMEREPORT.DATE, 
                      CASE WHEN dbo.NORMATIVESCHEDULE.STANDARDTIME is NOT NULL THEN dbo.NORMATIVESCHEDULE.STANDARDTIME 
					  WHEN DATEPART(WEEKDAY, 
                      dbo.WORKTIMEREPORT.DATE) = 6 OR
                      DATEPART(WEEKDAY, dbo.WORKTIMEREPORT.DATE) = 7 THEN 0 WHEN DATEPART(WEEKDAY, dbo.WORKTIMEREPORT.DATE) 
                      = 5 THEN 7 ELSE 8.25 END AS STANDARDTIME,
					 [color=red] case when dbo.PersonStatusReport.STATUS = 1 then dbo.PersonWorkTimeReport.STANDARDTIME = dbo.NORMATIVEEMPLOYEES.STANDARDTIME else dbo. end as STANDARDTIME[/color]
					  

FROM         dbo.WORKTIMEREPORT LEFT OUTER JOIN
                      dbo.NORMATIVESCHEDULE ON dbo.WORKTIMEREPORT.DATE = dbo.NORMATIVESCHEDULE.DATE [color=red]LEFT OUTER JOIN
					  dbo.NORMATIVEEMPLOYEES[/color] 


Ребят, помогайте! чет ниче не получается у меня... Все что я дописал красным выделил... задача такая: если dbo.PersonStatusReport.STATUS = 1, то PersonWorkTimeReport.STANDARDTIME присвоить значение dbo.NORMATIVEEMPLOYEES.STANDARDTIME. но компилятор показывает ошибки...


что-то красного не видно

а компилятор выдает месыджбокс "Я, компилятор, показываю тебе ошибки!" ?
27 июл 15, 12:44    [17938643]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
zaknafein
Member

Откуда:
Сообщений: 64
Glory,

я не знаю как выразить мысль в коде)
27 июл 15, 12:46    [17938657]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
zaknafein
Member

Откуда:
Сообщений: 64
Winnipuh, с красным проблема вышла)
27 июл 15, 12:47    [17938663]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
Glory
Member

Откуда:
Сообщений: 104751
zaknafein
я не знаю как выразить мысль в коде)

Просто соблюдайте документированный синтаксис
27 июл 15, 12:47    [17938664]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
zaknafein
Member

Откуда:
Сообщений: 64
проблема в том, что по всей видимости эту проверку нужно вкрячить сюда
CASE WHEN dbo.NORMATIVESCHEDULE.STANDARDTIME is NOT NULL THEN dbo.NORMATIVESCHEDULE.STANDARDTIME 
					  WHEN DATEPART(WEEKDAY, 
                      dbo.WORKTIMEREPORT.DATE) = 6 OR
                      DATEPART(WEEKDAY, dbo.WORKTIMEREPORT.DATE) = 7 THEN 0 WHEN DATEPART(WEEKDAY, dbo.WORKTIMEREPORT.DATE) 
                      = 5 THEN 7 ELSE 8.25 END AS STANDARDTIME

Я попробовал дальше написать, но компилятор сообщает, что невозможно использовать дважды столбец standardtime.....
27 июл 15, 13:27    [17938918]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
Glory
Member

Откуда:
Сообщений: 104751
zaknafein
но компилятор сообщает, что невозможно использовать дважды столбец standardtime.....

Для вас это удивительно ?
27 июл 15, 13:30    [17938944]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
zaknafein
Member

Откуда:
Сообщений: 64
Glory,поэтому и прошу помощи у специалистов...
27 июл 15, 13:33    [17938972]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
Glory
Member

Откуда:
Сообщений: 104751
zaknafein
Glory,поэтому и прошу помощи у специалистов...

Вам не специалист нужен, а учитель
27 июл 15, 13:37    [17939008]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
zaknafein
Member

Откуда:
Сообщений: 64
Glory,я не спорю, но мне нужно сделать...учиться по ходу дела буду
27 июл 15, 13:39    [17939024]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
Glory
Member

Откуда:
Сообщений: 104751
zaknafein
Glory,я не спорю, но мне нужно сделать...учиться по ходу дела буду

только здесь не курсы синтаксиса
27 июл 15, 13:39    [17939031]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
zaknafein
Member

Откуда:
Сообщений: 64
Glory, понятно, спасибо за помощь.
27 июл 15, 13:40    [17939043]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
zaknafein
Member

Откуда:
Сообщений: 64
CREATE VIEW [dbo].[NormativeWorkTimeReport]
AS
SELECT     dbo.PersonStatusReport.NAME + ' ' + dbo.PersonStatusReport.FIRSTNAME + ' ' + dbo.PersonStatusReport.SECONDNAME AS NAME, 
                      dbo.PersonStatusReport.TABLENO, dbo.ORG.ORGNAME, dbo.DEPT.DEPARTMENT, dbo.PersonWorkTimeReport.DATE, 
					  case when dbo.PersonStatusReport.STATUS = 1 then dbo.NORMATIVEEMPLOYEES.STANDARDTIME else dbo.PersonWorkTimeReport.STANDARDTIME end as STANDARDTIME, 
                      CASE WHEN dbo.PersonWorkTimeReport.NOWORKTIME < 2700 AND 
                      dbo.PersonWorkTimeReport.WORKTIME > 2700 THEN dbo.PersonWorkTimeReport.FULLTIME - 2700 ELSE dbo.PersonWorkTimeReport.WORKTIME END AS WORKTIME,
                      dbo.PersonWorkTimeReport.NOWORKTIME, dbo.PersonWorkTimeReport.FULLTIME, dbo.PersonWorkTimeReport.ENTERDATE, 
                      dbo.PersonWorkTimeReport.EXITDATE, DATENAME(year, dbo.PersonWorkTimeReport.DATE) AS YEAR, DATENAME(month, dbo.PersonWorkTimeReport.DATE) 
                      AS MONTH, DATENAME(week, dbo.PersonWorkTimeReport.DATE) AS WEEK, dbo.PersonStatusReport.STATUS
FROM                  dbo.PersonWorkTimeReport LEFT OUTER JOIN
                      dbo.PersonStatusReport ON dbo.PersonWorkTimeReport.PERSONID = dbo.PersonStatusReport.PERSONID LEFT OUTER JOIN
                      dbo.ORG ON dbo.PersonStatusReport.ORGID = dbo.ORG.ORGID LEFT OUTER JOIN
                      dbo.DEPT ON dbo.PersonStatusReport.DEPID = dbo.DEPT.DEPID LEFT OUTER JOIN
		      dbo.NORMATIVEEMPLOYEES on dbo.PersonStatusReport.TABLENO = dbo.NORMATIVEEMPLOYEES.TABLENO

Ребят, подскажите, почему не срабатывает then в этом куске
case when dbo.PersonStatusReport.STATUS = 1 then dbo.NORMATIVEEMPLOYEES.STANDARDTIME else dbo.PersonWorkTimeReport.STANDARDTIME end as STANDARDTIME, 

запись в которой статус 1 есть...если меняю статус на 0 то else срабатывает нормально.
28 июл 15, 09:01    [17943305]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
Glory
Member

Откуда:
Сообщений: 104751
zaknafein
Ребят, подскажите, почему не срабатывает then в этом куске

А почему вы решили, что он не срабатывает ?
28 июл 15, 09:46    [17943521]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
zaknafein
Member

Откуда:
Сообщений: 64
Glory, решил из того, что не строится отчет в который передается значение STANDARDTIME... сложилось ощущение, что он не получает значение из таблицы dbo.NORMATIVEEMPLOYEES.... хотя я пробовал отдельно запросами получать записи сравнивая столбец tableno, все получалось
28 июл 15, 09:50    [17943537]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
Glory
Member

Откуда:
Сообщений: 104751
zaknafein
сложилось ощущение, что он не получает значение из таблицы dbo.NORMATIVEEMPLOYEES.

У вас ложные ощущения. Потому что вы по всей видимости не знаете разницы между не получает значение и отсутствует значение

zaknafein
хотя я пробовал отдельно запросами получать записи сравнивая столбец tableno, все получалось

А в одном запросе не пробовали ?

SELECT     dbo.PersonStatusReport.NAME + ' ' + dbo.PersonStatusReport.FIRSTNAME + ' ' + dbo.PersonStatusReport.SECONDNAME AS NAME, 
                      dbo.PersonStatusReport.TABLENO, dbo.ORG.ORGNAME, dbo.DEPT.DEPARTMENT, dbo.PersonWorkTimeReport.DATE, 
					  dbo.PersonStatusReport.STATUS, dbo.NORMATIVEEMPLOYEES.STANDARDTIME , 
                      CASE WHEN dbo.PersonWorkTimeReport.NOWORKTIME < 2700 AND 
                      dbo.PersonWorkTimeReport.WORKTIME > 2700 THEN dbo.PersonWorkTimeReport.FULLTIME - 2700 ELSE dbo.PersonWorkTimeReport.WORKTIME END AS WORKTIME,
                      dbo.PersonWorkTimeReport.NOWORKTIME, dbo.PersonWorkTimeReport.FULLTIME, dbo.PersonWorkTimeReport.ENTERDATE, 
                      dbo.PersonWorkTimeReport.EXITDATE, DATENAME(year, dbo.PersonWorkTimeReport.DATE) AS YEAR, DATENAME(month, dbo.PersonWorkTimeReport.DATE) 
                      AS MONTH, DATENAME(week, dbo.PersonWorkTimeReport.DATE) AS WEEK, dbo.PersonStatusReport.STATUS
FROM                  dbo.PersonWorkTimeReport LEFT OUTER JOIN
                      dbo.PersonStatusReport ON dbo.PersonWorkTimeReport.PERSONID = dbo.PersonStatusReport.PERSONID and dbo.PersonStatusReport.STATUS = 1 LEFT OUTER JOIN
                      dbo.ORG ON dbo.PersonStatusReport.ORGID = dbo.ORG.ORGID LEFT OUTER JOIN
                      dbo.DEPT ON dbo.PersonStatusReport.DEPID = dbo.DEPT.DEPID LEFT OUTER JOIN
		      dbo.NORMATIVEEMPLOYEES on dbo.PersonStatusReport.TABLENO = dbo.NORMATIVEEMPLOYEES.TABLENO
28 июл 15, 09:54    [17943557]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
zaknafein
Member

Откуда:
Сообщений: 64
Glory, попробовал... не работает
28 июл 15, 10:03    [17943601]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
Glory
Member

Откуда:
Сообщений: 104751
zaknafein
не работает

Мда. Вам учиться идти надо.
Типы содинений, NULL-ы и прочее изучать.
А то вы все буквы угадали, а слово прочитать не смогли
28 июл 15, 10:06    [17943610]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
zaknafein
Member

Откуда:
Сообщений: 64
Glory, ну вы мне подскажите в чем проблема в этом запросе?
28 июл 15, 10:09    [17943621]     Ответить | Цитировать Сообщить модератору
 Re: нужна помощь со скриптом  [new]
Glory
Member

Откуда:
Сообщений: 104751
zaknafein
ну вы мне подскажите в чем проблема в этом запросе?

В запросе проблемы нет
Есть проблема у вас с пониманием результатов запроса.
Потому что вы не знаете, как работают разные типы соединений.
28 июл 15, 10:11    [17943624]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить