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

Откуда:
Сообщений: 169
Подскажите, пожалуйста, как по колонке распределить период.

К примеру задаю период в скрипте.
set @DateFrom = '2011-04-01'
set @DateTo = '2011-04-30'

Хочу получить следующее:

date
1
2
3
4
5
6
7
и тд. Расписывает от начальной заданой даты до конечной.
15 июл 11, 14:12    [10979965]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
DECLARE
  @DateFrom datetime,
  @DateTo datetime

SET @DateFrom = '20110401'
SET @DateTo = '20110430'

SELECT
  Number +1
FROM
  master.dbo.spt_values
WHERE
  type = 'P'
  AND number <= DATEDIFF(dd, @DateFrom, @DateTo)
15 июл 11, 14:19    [10980025]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Или, все-таки это имелось ввиду:

DECLARE
  @DateFrom datetime,
  @DateTo datetime

SET @DateFrom = '20110401'
SET @DateTo = '20110430'

SELECT
  DATEADD(dd, Number, @DateFrom)
FROM
  master.dbo.spt_values
WHERE
  type = 'P'
  AND number <= DATEDIFF(dd, @DateFrom, @DateTo)
15 июл 11, 14:24    [10980094]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
r18romik
Member

Откуда:
Сообщений: 169
Благодарю, оба варианта мне подходят
15 июл 11, 14:45    [10980279]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
r18romik,

Лучше, все таки иметь заполненную таблицу-календарик.
15 июл 11, 14:56    [10980368]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
r18romik
Member

Откуда:
Сообщений: 169
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,j.datemax
from UserGroup
join c_UserGroup on c_UserGroup.ID=UserGroup.id
left join
(select c_ImportJobstat.UserGroupID,c_ImportQueue.startdate,'Да ' as status,
c_ImportJobStat.DateMin,c_ImportJobStat.DateMax
from c_ImportJobStat
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

Подскажи ещё пожалуйста, как в этот скриптик запихать
это, но запихать так, чтобы поле [Day] - дата выгрузки, совпадало со значениями этого запроа.

SELECT
Number +1
FROM
master.dbo.spt_values
WHERE
type = 'P'
AND number <= DATEDIFF(dd, @DateFrom, @DateTo)
15 июл 11, 15:06    [10980446]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
r18romik
Member

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

К сообщению приложен файл. Размер - 17Kb
15 июл 11, 15:08    [10980463]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
r18romik,

Ваш запрос абсолютно не читаем. Приведите структурированный запрос в тегах T-SQL.
15 июл 11, 15:21    [10980562]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
r18romik
Member

Откуда:
Сообщений: 169
К сожалению у меня нет структурного, переписывать надо.
Вот начальная форма того же отчёта, может чем-то поможет.
Суть в том, что нужно просто добавить одну колонку со сзначениями запроса (DECLARE
@DateFrom datetime,
@DateTo datetime

SET @DateFrom = '20110401'
SET @DateTo = '20110430'

SELECT
Number +1
FROM
master.dbo.spt_values
WHERE
type = 'P'
AND number <= DATEDIFF(dd, @DateFrom, @DateTo) ) А чтобы соеденить его в полем DAY нужно левое соединение, только сделать его не получилось.

declare @DateFrom DATETIME
declare @DateTo DATETIME

set @DateFrom = '2011-04-01'
set @DateTo = '2011-04-30'

-- C Фактами

SELECT [d].[fullNameRus] AS [DistributorName], CASE MONTH(main.DateApplied) 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(main.DateApplied) AS [Day],
[main].[SalesQty] AS [SalesQty], [main].[SalesWeight] AS [SalesWeight], [main].[SalesAmount] AS [SalesAmount],
[main].[StockQty] AS [StockQty], [main].[StockWeight] AS [StockWeight], [main].[StockAmount] AS [StockAmount], NULL, NULL
FROM c_ImportStability_vw main
INNER JOIN UserGroup ug ON main.DistribID = ug.[key]
INNER JOIN c_UserGroup d ON ug.ID = d.ID
INNER JOIN master.dbo.spt_values ON type = 'P' AND number <= DATEDIFF(dd, @DateFrom, @DateTo)
AND (main.DateApplied >= '20110401')
AND (main.DateApplied <= '20110430')
15 июл 11, 15:32    [10980704]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
r18romik
Member

Откуда:
Сообщений: 169
Ну же Гении SQL-ля помогите:)
15 июл 11, 15:33    [10980707]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
r18romik, формотировать можно примерно так, используя тег [ SRC]:
DECLARE @DateFrom DATETIME
DECLARE @DateTo DATETIME

SET @DateFrom = '20110401'
SET @DateTo = '20110430'

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

--А чтобы соеденить его в полем DAY нужно левое соединение, только сделать его не получилось.

DECLARE @DateFrom DATETIME
DECLARE @DateTo DATETIME

SET @DateFrom = '2011-04-01'
SET @DateTo = '2011-04-30'

-- C Фактами

SELECT  [d].[fullNameRus] AS [DistributorName],
        CASE MONTH(main.DateApplied)
          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(main.DateApplied) AS [Day],
        [main].[SalesQty] AS [SalesQty],
        [main].[SalesWeight] AS [SalesWeight],
        [main].[SalesAmount] AS [SalesAmount],
        [main].[StockQty] AS [StockQty],
        [main].[StockWeight] AS [StockWeight],
        [main].[StockAmount] AS [StockAmount],
        NULL,
        NULL
FROM    c_ImportStability_vw main
INNER JOIN UserGroup ug
ON      main.DistribID = ug.[key]
INNER JOIN c_UserGroup d
ON      ug.ID = d.ID
INNER JOIN master.dbo.spt_values
ON      type = 'P'
        AND number <= DATEDIFF(dd, @DateFrom, @DateTo)
        AND ( main.DateApplied >= '20110401' )
        AND ( main.DateApplied <= '20110430' ) 
15 июл 11, 15:41    [10980777]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31991
r18romik
Ну же Гении SQL-ля помогите:)
Вам уже помогли: 10980368

Или есть какие то недостатки?
15 июл 11, 16:36    [10981233]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
r18romik
Member

Откуда:
Сообщений: 169
Да, есть.
Смотрите, запрос уже модернизированный, вниз вставил часть кода который дал pkarklin.
Но ни как не могу его связать с полем Day. Поле Day означает дату реальной загрузки в таблицу, а дополнительное поле которое я хочу вставить должно означать дату фактов. То есть должна вырисовываться картина дата фактов к примеру с 1 по 10 в столбец и напротив дата реальной загрузки за этот день.


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,j.datemax
--Dat.number
from UserGroup
join c_UserGroup on c_UserGroup.ID=UserGroup.id
left join
(select c_ImportJobstat.UserGroupID,c_ImportQueue.startdate,'Да ' as status,
c_ImportJobStat.DateMin,c_ImportJobStat.DateMax
from c_ImportJobStat
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 Dat
--ON Dat.type = 'P'
-- AND number <= DATEDIFF(dd, @Startdate, @Enddate)
-- AND ( @Startdate >= '20110601' )
-- AND ( @Enddate <= '20110630' )
where
c_UserGroup.type=4
18 июл 11, 08:50    [10987289]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31991
r18romik
Да, есть.
Смотрите, запрос уже модернизированный, вниз вставил часть кода который дал pkarklin.
pkarklin дал вам другой совет:
pkarklin
r18romik,
Лучше, все таки иметь заполненную таблицу-календарик.
Глупо каждый раз вычислять константу вместо того, что бы просто её хранить.
18 июл 11, 09:11    [10987366]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
r18romik
Member

Откуда:
Сообщений: 169
Соглашусь.
Что-то типа этого
18 июл 11, 09:22    [10987401]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
r18romik
Member

Откуда:
Сообщений: 169
DECLARE
@DateFrom datetime,
@DateTo datetime

SET @DateFrom = '20110601'
SET @DateTo = '20110630'

SELECT
DATEADD(dd, Number, @DateFrom)
FROM
master.dbo.spt_values
WHERE
type = 'P'
AND number <= DATEDIFF(dd, @DateFrom, @DateTo)
18 июл 11, 09:22    [10987403]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
r18romik, два вопроса:
1. Вы принципиально правильные теги не хотите осваивать?
2. Вот честно скажите, вы понимаете что пишите?
18 июл 11, 09:31    [10987438]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
r18romik
Member

Откуда:
Сообщений: 169
Ответы:
1) Я просто брал уже готовые наработки и правил под свои нуждны
2) То что правлю понимаю
18 июл 11, 09:46    [10987498]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31991
r18romik
Ответы:
1) Я просто брал уже готовые наработки и правил под свои нуждны
2) То что правлю понимаю
Тоже повторю вопрос:
1. Вы принципиально правильные теги не хотите осваивать?

Посмотрите, как выглядит в этом треде ваш текст с исходниками и любой другой.
18 июл 11, 10:04    [10987606]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31991
r18romik
Соглашусь.
Что-то типа этого
А зачем тогда так упорно вычисляете?
18 июл 11, 10:05    [10987609]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
r18romik
Member

Откуда:
Сообщений: 169
Таблицу календарь нужно создать. Чем плоха вычисляемая дата?
Основная суть вообще не в этом.
В общиз чертах, есть запрос который я написал внизу, он показывает факты, когда была сделана выгрузка, была ли вообще она сделана и за какой период. Вот. (см рисунок)
К этой информации я хочу добавить ещё один столбец Фактическая дата, то есть если я задаю период к примеру с 1 по 7 столбце с фактической датой заполнялся в столбец с 1 по 7 число а поле day (в запросе) показывало в какой реально день была выгрузка.
Пример:
Период с 01.07 по 07.07
Фактическая дата day
1 2
2 3
3 4
4 5
5 6
6
7

В примере показано, что фактически выгрузка за 01.07 происходила 02.07 и тд далее.
Думаю понятно объяснил)

К сообщению приложен файл. Размер - 34Kb
18 июл 11, 10:20    [10987658]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
Glory
Member

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

В примере показано, что фактически выгрузка за 01.07 происходила 02.07 и тд далее.
Думаю понятно объяснил)

Это для того, чтобы всех запутать ?
18 июл 11, 10:22    [10987666]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
r18romik, понятно... Так дело дальше не пойдет. Пожалуйста, внимательно ознакомтесь.
18 июл 11, 10:24    [10987669]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
r18romik
Member

Откуда:
Сообщений: 169
kDnZP - Не нашёл ни чего такого в данной теме
18 июл 11, 12:10    [10988386]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по Дате.  [new]
r18romik
Member

Откуда:
Сообщений: 169
Glory - что не понятно? Давай объясню....
18 июл 11, 12:11    [10988390]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить