Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Помогите создать ФУНКЦИЮ  [new]
Roman Orestovich
Member

Откуда:
Сообщений: 16
Друзья, нужна функція которая будет в таблице отображать в матричной таблице от 1-31 дня месяца
3 июл 17, 14:23    [20609071]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать ФУНКЦИЮ  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Roman Orestovich,

"Нужна функция ТЧК Подробности письмом ТЧК"
3 июл 17, 14:44    [20609169]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать ФУНКЦИЮ  [new]
Владислав Колосов
Member

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

какой-то unpivot календаря нужен, по все видимости.
3 июл 17, 14:58    [20609256]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать ФУНКЦИЮ  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
SET DATEFIRST 1
;
WITH
dd AS (
  SELECT
    [wn] = DATEPART( WEEK, ss.[date] ),
    [wd] = DATEPART( WEEKDAY, ss.[date] ),
    ss.[date]
  FROM (
      SELECT
        [date] = ( CONVERT( DATE, '20170101' ) )
    ) ss
  UNION ALL
  SELECT
    [wn] = DATEPART( WEEK, ss.[date] ),
    [wd] = DATEPART( WEEKDAY, ss.[date] ),
    ss.[date]
  FROM
    dd
    CROSS APPLY (
      SELECT
        [date] = DATEADD( DAY, 1, dd.[date] )
    ) ss
  WHERE
    dd.[date] < '20171231'
)
SELECT
  [wn],
  [mon] = MAX( CASE WHEN [wd] = 1 THEN [date] END ),
  [tue] = MAX( CASE WHEN [wd] = 2 THEN [date] END ),
  [wed] = MAX( CASE WHEN [wd] = 3 THEN [date] END ),
  [thu] = MAX( CASE WHEN [wd] = 4 THEN [date] END ),
  [fri] = MAX( CASE WHEN [wd] = 5 THEN [date] END ),
  [sat] = MAX( CASE WHEN [wd] = 6 THEN [date] END ),
  [sun] = MAX( CASE WHEN [wd] = 7 THEN [date] END )
FROM
  dd
GROUP BY
  [wn]
OPTION (
  MAXRECURSION 0 
)
3 июл 17, 15:00    [20609276]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать ФУНКЦИЮ  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
календарь нынешнего месяца



Ну и сообщения там вокруг данной ссылки почитать можно.
Может, и не то, что нужно, конечно
3 июл 17, 15:57    [20609553]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать ФУНКЦИЮ  [new]
_human
Member

Откуда:
Сообщений: 560
Roman Orestovich,

declare @dt date = getdate();

;with m_days as 
(
	select top 31 
		 RIGHT('00' + CONVERT(VARCHAR(2), ROW_NUMBER() over(order by (select null))), 2) as m_day
		,RIGHT('00' + CONVERT(VARCHAR(2), month(@dt)), 2) as m_month
		,CONVERT(VARCHAR(4), year(@dt)) as m_year
	from master..spt_values v
)

, src  as 
(
	 select 
	 m_day
	,datename(dw, convert(date, concat(m_year, m_month, m_day))) as dw
	,datepart(week, convert(date, concat(m_year, m_month, m_day))) as wk
	from m_days
	where isdate(concat(m_year, m_month, m_day)) = 1
)

select p.*
from
(
	select * 
	from src
) p_src
pivot(max(m_day) for dw in (Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday)) as p
3 июл 17, 16:54    [20609843]     Ответить | Цитировать Сообщить модератору
 Re: Помогите создать ФУНКЦИЮ  [new]
Dimbuch®
Member

Откуда: Москва
Сообщений: 47
Roman Orestovich,

    ;WITH cte_days AS
    (
        SELECT
            dp_day = CONVERT(smalldatetime, '20170101')

        UNION ALL

        SELECT
            dp_day = DATEADD(DAY, 1, c.dp_day)
        FROM cte_days c
        WHERE c.dp_day < CONVERT(smalldatetime, '20170331')
    )
    SELECT
        *
    FROM cte_days
    OPTION (MAXRECURSION 0)
5 июл 17, 18:37    [20616880]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить