|
PIVOT и DATETIME
|
|||
---|---|---|---|
#18+
Исходные данные: CREATE database pivot_test GO USE pivot_test GO CREATE TABLE test1( [id] int NULL, [name_guest] nvarchar(20) NULL, [p_time] datetime not null default getdate(), [sum] int NOT NULL ); GO В таблице есть имя гостя и сумма. Ну скажем Иванов И.И , Петров П.П. Боширов И.В. :) Уважаемые коллеги! Вопрос: как с помощью PIVOT найти сумму которую Иванов, Петров, Боширов заплатили за март апрель, май, июнь? Работает ли PIVOT с таким типом данных как DATETIME? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 22:42 |
|
PIVOT и DATETIME
|
|||
---|---|---|---|
#18+
RuRed, Вам же нужна не произвольная дата, а номер месяца. Используйте month(p_time) и назначьте колонки от [01] до [12], затем поверните с группировкой по номеру месяца. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2020, 22:55 |
|
PIVOT и DATETIME
|
|||
---|---|---|---|
#18+
SELECT [name], [01], [02] ,[03], [04], [05] ,[06], [07], [08], [09], [10], [11], [12] FROM test1 PIVOT (SUM(summa) FOR month(p_time) IN ([01], [02] ,[03], [04], [05] ,[06], [07], [08], [09], [10], [11], [12])) AS PIVOTtable Не работает =) DATEPART(month, s_time) после FOR тоже datepart нельзя вставить после FOR Что я делаю не так?=) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2020, 18:54 |
|
PIVOT и DATETIME
|
|||
---|---|---|---|
#18+
RuRed datepart нельзя вставить после FOR его можно вставить в подзапрос ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2020, 18:56 |
|
PIVOT и DATETIME
|
|||
---|---|---|---|
#18+
RuRed, RuReddatepart нельзя вставить после FOR Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2020, 18:56 |
|
PIVOT и DATETIME
|
|||
---|---|---|---|
#18+
Я решил немного дополнить тему, и усложнить задачу. По месяцам PIVOT справился отлично: SELECT [name], [01], [02] ,[03], [04], [05] ,[06], [07], [08], [09], [10], [11], [12] FROM ( select * , p_time_month = month(p_time) from test1 a ) a PIVOT (SUM(summa) FOR p_time_month IN ([01], [02] ,[03], [04], [05] ,[06], [07], [08], [09], [10], [11], [12])) AS PIVOTtable . А вот как поступить, если нужно разделить агрегатную функцию не по месяцам, а по кварталам, при этом использовать PIVOT? Тогда как в случае с month(p_time) , quarter(p_time) работать не будет, а будет иметь следующую форму DATEPART(quarter, p_time), но такая форма не подходит в подзапрос... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2020, 13:15 |
|
PIVOT и DATETIME
|
|||
---|---|---|---|
#18+
RuRed, Код: sql 1. 2. 3. 4. 5. 6. 7.
Только, пожалуйста, не называйте поля именами операторов ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2020, 15:14 |
|
PIVOT и DATETIME
|
|||
---|---|---|---|
#18+
RuRed, или вы хотите вот так поучить? [M1], [M2], [M3], [Q1], [M4], [M5], [M6], [Q2], [M7], [M8], [M9], [Q3], [M10], [M11], [M12], [Q4] ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2020, 15:15 |
|
PIVOT и DATETIME
|
|||
---|---|---|---|
#18+
Благодарю, этого достаточно ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 16:29 |
|
PIVOT и DATETIME
|
|||
---|---|---|---|
#18+
RuRed, Единственное что в этом скрипте нашел ошибку, SELECT [name], [01], [02] ,[03], [04], [05] ,[06], [07], [08], [09], [10], [11], [12] FROM ( select * , p_time_month = month(p_time) from test1 a ) a PIVOT (SUM(summa) FOR p_time_month IN ([01], [02] ,[03], [04], [05] ,[06], [07], [08], [09], [10], [11], [12])) AS PIVOTtable в подзапросе вместо звездочки нужно перечислить столбцы, при этом указать перед ними букву А как в примере a.id, a.name_guest. И только тогда результат будет выдавать нужное количество строк, например у меня их 40. По этой же причине p_time_quarter = datepart(quarter, a.p_time) не работал квартал. Еще раз благодарю NULLINа. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2020, 23:29 |
|
|
start [/forum/topic.php?fid=46&fpage=70&tid=1686512]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 331ms |
total: | 442ms |
0 / 0 |