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

Откуда:
Сообщений: 169
Есть запрос который я написал внизу, он показывает факты, когда была сделана выгрузка, была ли вообще она сделана и за какой период. Вот. (см рисунок)
К этой информации я хочу добавить ещё один столбец Фактическая дата.


DECLARE @Startdate date
declare @Enddate date

SET @Startdate ='20110601'
SET @Enddate = '20110630'

SELECT distinct UserGroup.ID,UserGroup.name,
CASE MONTH(j.startdate) 
WHEN 1 THEN 'Январь' 
WHEN 2 THEN 'Февраль'
WHEN 3 THEN 'Март' 
WHEN 4 THEN 'Апрель' 
WHEN 5 THEN 'Май' 
WHEN 6 THEN 'Июнь' 
WHEN 7 THEN 'Июль' 
WHEN 8 THEN 'Август'
WHEN 9 THEN 'Сентябрь' 
WHEN 10 THEN 'Октябрь' 
WHEN 11 THEN 'Ноябрь' 
WHEN 12 THEN 'Декабрь' 
END AS [Month], DAY(j.startdate) AS Day,
'Запасы' AS Тип,
isnull(j.status,'Нет') AS Факт, 
j.datemin AS ПериодНачало,
j.datemax AS ПериодКонец
FROM UserGroup 
INNER JOIN c_UserGroup  on c_UserGroup.ID=UserGroup.id
INNER JOIN
(SELECT c_ImportJobstat.UserGroupID,c_ImportQueue.startdate,'Да ' AS status,
c_ImportJobStat.DateMin,c_ImportJobStat.DateMax
FROM c_ImportJobStat 
INNER JOIN c_ImportQueue on c_ImportQueue.id=c_ImportJobStat.JobID
WHERE 
c_importQueue.jobname in ('Импорт запасов')
AND cast(c_ImportQueue.startdate as DATE)BETWEEN @Startdate and @Enddate
AND c_ImportQueue.status='V') j
on j.UserGroupID=UserGroup.id 
WHERE 
c_UserGroup.type=4
19 июл 11, 08:03    [10992674]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
r18romik
Member

Откуда:
Сообщений: 169
Результат скрипта, который представлен выше

К сообщению приложен файл. Размер - 49Kb
19 июл 11, 08:05    [10992677]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
r18romik
Member

Откуда:
Сообщений: 169
Получить хочу следующее. К существующему результату, который показан как рисунке выше, хочу добавить столбец с Фактической датой. Пример показан на рисунке.
В Дату фактов задаётся период дат. Поле DayDate это дата загрузки прдаж.

Проблема в том, что не получается добавить столбец в основной результат!

К сообщению приложен файл. Размер - 64Kb
19 июл 11, 08:18    [10992690]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
r18romik
Member

Откуда:
Сообщений: 169
Подскажите как это реализовать?
19 июл 11, 08:19    [10992692]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
r18romik
К этой информации я хочу добавить ещё один столбец Фактическая дата.
Ну так скажите алгоритм формирования этой колонки.
Например, Фактическая дата = дата загрузки прдаж + 3 дня.

Просто словами можете описать?
19 июл 11, 08:36    [10992720]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
alexeyvg
Просто словами можете описать?
Можно даже примером - а то в вашей картинке это поле пустое - значит, вы сами не представляете, что туда должно попасть.
19 июл 11, 08:37    [10992723]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
r18romik
Member

Откуда:
Сообщений: 169
alexeyvg
alexeyvg
Просто словами можете описать?
Можно даже примером - а то в вашей картинке это поле пустое - значит, вы сами не представляете, что туда должно попасть.


Представляю.
В него должно попасть заданный период.
Словами: Я задаю в скрипт период
SET @Startdate ='20110601'
SET @Enddate = '20110630'
Этот период и должен заполнится в этот столбец.
По столбцу он должен распределиться с 1 по 30 числа.
19 июл 11, 08:51    [10992757]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
r18romik
alexeyvg
пропущено...
Можно даже примером - а то в вашей картинке это поле пустое - значит, вы сами не представляете, что туда должно попасть.


Представляю.
В него должно попасть заданный период.
Словами: Я задаю в скрипт период
SET @Startdate ='20110601'
SET @Enddate = '20110630'
Этот период и должен заполнится в этот столбец.
По столбцу он должен распределиться с 1 по 30 числа.
Он не может распределиться с 1 по 30 числа.
Там в результате всего 10 строк.

ПОлучается, должны попасть только первые 10 дней?

Вы бы лучьше просто в рисунке показали бы.
19 июл 11, 09:02    [10992790]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
r18romik
По столбцу он должен распределиться с 1 по 30 числа.
И порядок неважен?

Ваш запрос, как вы понимаете, может выводить строки в любом порядке, сортировки там нету.
19 июл 11, 09:03    [10992797]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
r18romik
Member

Откуда:
Сообщений: 169
Попробую описать ещё более понятно: На рисунке мы видим поля DayDate - это дата загрузки, DataMin это начальный период загрузки и DataMaх это конечный период загрузки. Добавить хочу колонку Дата фактов.
Нужна она для того чтобы можно было посмотреть когда был сделана реально выгрузка за ту или иную дату.
19 июл 11, 09:05    [10992803]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
r18romik
Member

Откуда:
Сообщений: 169
Порядок не особо важен.
А если в моём случае 14 строк в выводк, значит по остальным дням выгрузки не было их тоже нужно вывести
19 июл 11, 09:08    [10992807]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
r18romik
Member

Откуда:
Сообщений: 169
Ещё объсню по табличке.
Мы видим что DayDate = 1-ое число, а DataMin стоит 31.05 это означает, что за 31-ое число выгрузку сделали 1.06 и так далее.

К сообщению приложен файл. Размер - 53Kb
19 июл 11, 09:11    [10992819]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
r18romik
Ещё объсню по табличке.
Мы видим что DayDate = 1-ое число, а DataMin стоит 31.05 это означает, что за 31-ое число выгрузку сделали 1.06 и так далее.

Вместо и так далее - распишите получаемые значения для всех остальных значений. Потому как судя по вашим словам достаточно простого DATEADD.
19 июл 11, 09:19    [10992830]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
kDnZP
r18romik
Ещё объсню по табличке.
Мы видим что DayDate = 1-ое число, а DataMin стоит 31.05 это означает, что за 31-ое число выгрузку сделали 1.06 и так далее.

Вместо и так далее - распишите получаемые значения для всех остальных значений. Потому как судя по вашим словам достаточно простого DATEADD.
Ага, значит, не только я так и не понял, что нужно получить :-)
19 июл 11, 09:29    [10992851]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
alexeyvg, у ТС это второй заход после этой темы. Оформление гораздо лучше, вот только чего делать - все равно не ясно.
19 июл 11, 09:48    [10992917]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
r18romik
Member

Откуда:
Сообщений: 169
kDnZP
r18romik
Ещё объсню по табличке.
Мы видим что DayDate = 1-ое число, а DataMin стоит 31.05 это означает, что за 31-ое число выгрузку сделали 1.06 и так далее.

Вместо и так далее - распишите получаемые значения для всех остальных значений. Потому как судя по вашим словам достаточно простого DATEADD.


Согласен, что в моём скрипте не понятно что требуются.
Но попробую ещё раз объяснить.
В текущем запросе при задаче периода отбор происходит по Дате выгрузки, а мне нужно по Дате фактов, как показано на примере ниже.

Период: C 01.07 по 05.07

Дата фактов Дата выгрузки (dayDate)
01.июл нет выгрузки
02.июл нет выгрузки
03.июл 04.июл
04.июл 05.июл
05.июл 06.июл
19 июл 11, 10:02    [10992969]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
r18romik
Member

Откуда:
Сообщений: 169
Смотрим по первому рисунку: Мы видим, что 4-ого числа мы выгрузили за 03 число (колонка dateMin), дальше 5-ого числа мы выгрузили за 04 число, дальше 6-ого числа мы выгрузили за 5-ое число.

Смотрим второй рисунок:

Дата фактов то что я хочу добавить в первый русунок, Дата загрузки продаж соотвествует с поле Day.
На рисунке мы видим точно такую же картину, но не много в другой представлении.
За 3-ее число мы выгузили 04.07
За 4-ое число мы выгрузили 05.07
За 5-ое - 06.07
За 6-ое - 07.07

К сообщению приложен файл. Размер - 44Kb
19 июл 11, 10:02    [10992971]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
r18romik
Member

Откуда:
Сообщений: 169
kDnZP
alexeyvg, у ТС это второй заход после этой темы. Оформление гораздо лучше, вот только чего делать - все равно не ясно.


Правильно. Ребят я стараюсь объяснить.
19 июл 11, 10:03    [10992976]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
r18romik, по вашим словам получается нечто следующее, хотя совсем не уверен, что это верно:
DECLARE @tbl TABLE(datemin DATETIME, day1 INT)
INSERT INTO @tbl(datemin, day1)
SELECT '20110630', 1 UNION ALL SELECT
 '20110703', 4 UNION ALL SELECT
 '20110704', 5 UNION ALL SELECT
 '20110705', 6

SELECT  *,
        CAST(CASE WHEN DAY(datemin) > day1 THEN CONVERT(VARCHAR(6),DATEADD(MONTH, 1, datemin),112)+REPLACE(STR(day1,2),' ','0')
             ELSE CONVERT(VARCHAR(6),datemin,112)+REPLACE(STR(day1,2),' ','0')
        END AS DATETIME) df
FROM    @tbl
19 июл 11, 10:29    [10993103]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
r18romik
kDnZP
alexeyvg, у ТС это второй заход после этой темы. Оформление гораздо лучше, вот только чего делать - все равно не ясно.

Правильно. Ребят я стараюсь объяснить.
Ну так старайтесь.

Вы считаете, что это математический алгоритм?
r18romik
В текущем запросе при задаче периода отбор происходит по Дате выгрузки, а мне нужно по Дате фактов, как показано на примере ниже.

r18romik
Дата фактов то что я хочу добавить в первый русунок
19 июл 11, 10:33    [10993122]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
r18romik
Member

Откуда:
Сообщений: 169
alexeyvg
r18romik
пропущено...

Правильно. Ребят я стараюсь объяснить.
Ну так старайтесь.

Вы считаете, что это математический алгоритм?
r18romik
В текущем запросе при задаче периода отбор происходит по Дате выгрузки, а мне нужно по Дате фактов, как показано на примере ниже.

r18romik
Дата фактов то что я хочу добавить в первый русунок



Нет конечно. Математикой здесь и не пахнет.
Люди просят объяснить на словах, а не на цифрах
19 июл 11, 11:13    [10993419]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
_ч_
Member

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

что из себя представляет дата фактов? это поле в соответствующей таблице?
на основании чего дата фактов получается такой, а не другой?

автор
Период: C 01.07 по 05.07

Дата фактов Дата выгрузки (dayDate)
01.июл нет выгрузки
02.июл нет выгрузки
03.июл 04.июл
04.июл 05.июл
05.июл 06.июл


это у вас таблица в вашей бд?
19 июл 11, 11:35    [10993627]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
r18romik
Member

Откуда:
Сообщений: 169
_ч_
r18romik,

что из себя представляет дата фактов? это поле в соответствующей таблице?
на основании чего дата фактов получается такой, а не другой?

автор
Период: C 01.07 по 05.07

Дата фактов Дата выгрузки (dayDate)
01.июл нет выгрузки
02.июл нет выгрузки
03.июл 04.июл
04.июл 05.июл
05.июл 06.июл


это у вас таблица в вашей бд?


Дата Фактов должна расчитываться сама по заданному периоду.
В данном случае период задали с 1.07 по 05.07 и дата фактов на основании этого зполнилась.
А Дата выгрузки это уже табличные данные, которые хочу сопоставить с датой фактов.
19 июл 11, 12:16    [10994011]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
Glory
Member

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

А Дата выгрузки это уже табличные данные, которые хочу сопоставить с датой фактов.

Ну так сопоставьте. JOIN что ли не можете написать ?
19 июл 11, 12:18    [10994019]     Ответить | Цитировать Сообщить модератору
 Re: Добавить вывод колонки!  [new]
r18romik
Member

Откуда:
Сообщений: 169
Использовал JOIN.
Получается всё в куче.
Вот смотрите, вот скрипт формирования даты фактов:

SELECT
DATEADD(dd, Number, @DateFrom)
FROM
master.dbo.spt_values
WHERE
type = 'P'
AND number <= DATEDIFF(dd, @DateFrom, @DateTo)

Вот основной скрипт куда я его добавил этот скрипт через JOIN:

DECLARE @Startdate date
declare @Enddate date

SET @Startdate ='20110701'
SET @Enddate = '20110706'

SELECT distinct UserGroup.ID,UserGroup.name,
CASE MONTH(j.startdate)
WHEN 1 THEN 'Январь'
WHEN 2 THEN 'Февраль'
WHEN 3 THEN 'Март'
WHEN 4 THEN 'Апрель'
WHEN 5 THEN 'Май'
WHEN 6 THEN 'Июнь'
WHEN 7 THEN 'Июль'
WHEN 8 THEN 'Август'
WHEN 9 THEN 'Сентябрь'
WHEN 10 THEN 'Октябрь'
WHEN 11 THEN 'Ноябрь'
WHEN 12 THEN 'Декабрь'
END AS [Month], DAY(j.startdate) AS Day,
'Запасы' AS Тип,
isnull(j.status,'Нет') AS Факт,
j.datemin AS ПериодНачало,
j.datemax AS ПериодКонец,
DATEADD(dd, D.Number, @Startdate)

FROM UserGroup
INNER JOIN c_UserGroup on c_UserGroup.ID=UserGroup.id
INNER JOIN
(SELECT c_ImportJobstat.UserGroupID,c_ImportQueue.startdate,'Да ' AS status,
c_ImportJobStat.DateMin,c_ImportJobStat.DateMax
FROM c_ImportJobStat
INNER JOIN c_ImportQueue on c_ImportQueue.id=c_ImportJobStat.JobID
WHERE
c_importQueue.jobname in ('Импорт запасов')
AND cast(c_ImportQueue.startdate as DATE)BETWEEN @Startdate and @Enddate
AND c_ImportQueue.status='V') j
on j.UserGroupID=UserGroup.id
INNER JOIN master.dbo.spt_values AS D
ON D.type = 'P'
AND number <= DATEDIFF(dd, @Startdate, @Enddate)
WHERE
c_UserGroup.type=4

Вывод получается кривой:

К сообщению приложен файл. Размер - 49Kb
19 июл 11, 12:43    [10994204]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить