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

Откуда:
Сообщений: 200
вот делаю выборку
SELECT 'Металл' as types,[2], [3], [4], [5], [6],[7],[8],[9],[10],[0] as sums
FROM 
(SELECT  CASE GROUPING(id_zavod) WHEN 0 THEN id_zavod ELSE '0' END zavod,
ISNULL(SUM(CASE value_1 WHEN null THEN 0 ELSE value_1*colvo END),0) AS value_1
FROM [real]
WHERE id_zavod =isnull(@id_zavod,id_zavod) and dateSend BETWEEN @sd and @ed 
group by id_zavod with rollup ) p
PIVOT
(
 sum(value_1)
FOR p.zavod IN
( [2], [3], [4], [5], [6],[7],[8],[9],[10],[0] )
) AS pvt
group by [2], [3], [4], [5], [6],[7],[8],[9],[10],[0]

вопрос. мне нужно получить выборку чтоб первый 10 столбцов было выборка за январь, потом по всем месяцам
должно получится
[2] за январь, [3] за январь, [4] за январь, [5] за январь, [6] за январь,[7] за январь,[8] за январь,[9] за январь,[10] за январь и так в ряд все месяца в виде столбцов.
как можно сделать.
данные в таблице хранятся
ид записи, ид завода, статья затрат1, статья затрат2, статья затрат3, статья затрат4, дата
мне нужно получить чтоб статья затрат стала строчкой и в разрезе стать нужно посчитать по заводам суммы.
11 мар 12, 16:55    [12226604]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
Рострига Артур
Member

Откуда:
Сообщений: 200
хорошо а как можно сделать такое
есть дата в формате ГГГГ-мм-дд
как можно сделать выборку чтоб получить столбец
name mes1,mes2
что в столбец mes1 попадали
select sum(summ) from table where date_add beetben '2012-01-01' and '2011-01-31'
в mes2
select sum(summ) from table where date_add beetben '2012-02-01' and '2011-02-28'
11 мар 12, 21:15    [12228100]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
qwerty112
Guest
Рострига Артур
хорошо а как можно сделать такое
есть дата в формате ГГГГ-мм-дд
как можно сделать выборку чтоб получить столбец
name mes1,mes2
что в столбец mes1 попадали
select sum(summ) from table where date_add beetben '2012-01-01' and '2011-01-31'
в mes2
select sum(summ) from table where date_add beetben '2012-02-01' and '2011-02-28'

говорили тебе, говорили, в бид=4, что формат - это только "для зрителей", а дата она и есть - дата, "всё едино"

>> как можно сделать

pivot-ом по Month([есть дата в формате])
11 мар 12, 22:54    [12228495]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
Рострига Артур
Member

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

я понимаю что она хранится в формате дата-время.
но у меня там с точностью до дня. а мне нужно получить 12 месяцев сгруппированные.
11 мар 12, 23:00    [12228525]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
Klick
Member

Откуда: Стерлитамак - Москва
Сообщений: 1023
Рострига Артур
qwerty112,

я понимаю что она хранится в формате дата-время.
но у меня там с точностью до дня. а мне нужно получить 12 месяцев сгруппированные.


DATENAME(month,dateSend) не работает?
11 мар 12, 23:07    [12228566]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
qwerty112
Guest
Рострига Артур
хорошо а как можно сделать такое
есть дата в формате ГГГГ-мм-дд
как можно сделать выборку чтоб получить столбец
name mes1,mes2
что в столбец mes1 попадали
select sum(summ) from table where date_add beetben '2012-01-01' and '2011-01-31'
в mes2
select sum(summ) from table where date_add beetben '2012-02-01' and '2011-02-28'

это - описка ?
11 мар 12, 23:07    [12228568]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
Рострига Артур
Member

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

ну вообще да, но все равно мне нужно еще в виде столбца сделать год

чтоб получилось
имя, мес1, мес2, год
металл 23 33 2011
металл 33 55 2012
думал через юнион
делаю сначала за один год, потом за другой. может есть как лучше?
11 мар 12, 23:20    [12228624]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
qwerty112
Guest
Рострига Артур
qwerty112,

ну вообще да, но все равно мне нужно еще в виде столбца сделать год

чтоб получилось
имя, мес1, мес2, год
металл 23 33 2011
металл 33 55 2012
думал через юнион
делаю сначала за один год, потом за другой. может есть как лучше?

есть, и уже и сказано - как

select имя, y,[1],[2], [3], [4], [5], [6],[7],[8],[9],[10]
from
(select имя, Year(дата) as y, Month(дата) as m, value from T) a
pivot (sum(value) for m in([1],[2], [3], [4], [5], [6],[7],[8],[9],[10])) pvt
11 мар 12, 23:29    [12228654]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
Рострига Артур
Member

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

это получилось, а вот с первого столбца никак.
12 мар 12, 00:32    [12228845]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
qwerty112
Guest
Рострига Артур
qwerty112,

это получилось, а вот с первого столбца никак.

что "с первого столбца" ?
ты на каком языке говориш ?
12 мар 12, 01:21    [12228965]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
Рострига Артур
Member

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

сорри туплю..с первого поста...
12 мар 12, 01:27    [12228976]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
qwerty112
Guest
Рострига Артур
qwerty112,

сорри туплю..с первого поста...

нуу.., первый пост, как ты понял по множеству ответов, - создаёт впечатление, что его писал, какой-то бот, с небольшим, но специфич.словарным запасом

вот почитай/подумай - https://www.sql.ru/forum/actualthread.aspx?tid=127456
п.6. - я бы тебе посоветовал - выучить наизусть
12 мар 12, 01:33    [12228992]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
Рострига Артур
Member

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

а как можно сделать тут
DECLARE @id_groupreal as varchar(10)
SELECT * FROM table WHERE id_groupreal  IN (@id_groupreal)

мне нужно сделать выборку когда id_groupreal = 1,2
ругается
Conversion failed when converting the varchar value '1,2' to data type int.
зачем ему инт там? и как передать 2 значения(
12 мар 12, 03:00    [12229053]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Рострига Артур
qwerty112,

а как можно сделать тут
DECLARE @id_groupreal as varchar(10)
SELECT * FROM table WHERE id_groupreal  IN (@id_groupreal)

мне нужно сделать выборку когда id_groupreal = 1,2
ругается
Conversion failed when converting the varchar value '1,2' to data type int.
зачем ему инт там? и как передать 2 значения(
Потому что вы синтаксис придумали.

DECLARE @id_groupreal table ( id int primary key )

insert @id_groupreal ( id ) select 1 union all select 2
SELECT * FROM table WHERE id_groupreal  IN ( select x.id from @id_groupreal x )
12 мар 12, 03:11    [12229067]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
Рострига Артур
Member

Откуда:
Сообщений: 200
Гавриленко Сергей Алексеевич,

А как в переменную @id_groupreal передать значение? это я использую как входящий параметр хранимой процедуры.
12 мар 12, 03:17    [12229070]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Рострига Артур
Гавриленко Сергей Алексеевич,

А как в переменную @id_groupreal передать значение? это я использую как входящий параметр хранимой процедуры.

Табличные переменные вполне могут быть параметром хранимки. Ну или если версия сервера не позволяет - динамика.
12 мар 12, 03:21    [12229073]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
Рострига Артур
Member

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

сервер 2008
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) Jul 9 2008 14:43:34 Copyright (c) 1988-2008 Microsoft Corporation Developer Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1)
а какой текст мне подавать в эту переменную.. не разу не работал с таким типом.
мне нужно
CREATE PROCEDURE [dbo].[costs1]
	@sd as DATETIME,
	@ed as DATETIME,
	@type as int=NULL,
	@doptype as int = NULL,
	@id_zavod as int = NULL,
	@id_groupreal as int= NULL

потом вызвать
exec costs1 '20110101', '20130101',1,1,1,'1,3'

как сделать подобное?
12 мар 12, 03:32    [12229075]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Рострига Артур, Возвращающие табличное значение параметры (компонент Database Engine), см. пример.
12 мар 12, 04:02    [12229083]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
Рострига Артур
Member

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

Понятно. не вариант.. придется делать через условие OR думал через будет проще...не стоит того.
12 мар 12, 04:05    [12229084]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Рострига Артур
kDnZP,

Понятно. не вариант.. придется делать через условие OR думал через будет проще...не стоит того.

Через какое OR?
12 мар 12, 04:23    [12229089]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
iljy
Member

Откуда:
Сообщений: 8711
Рострига Артур,

какое еще OR? Чего с чем вы там орить собрались?
https://www.sql.ru/articles/mssql/03060701arraysandlistsinsqlserver.shtml

Для целых чисел можно и гораздо проще: сделайте из них varbinary, затем оно легко разрезается по 4 байта и превращается в таблицу.
12 мар 12, 11:26    [12230079]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iljy
Рострига Артур,

какое еще OR? Чего с чем вы там орить собрались?
https://www.sql.ru/articles/mssql/03060701arraysandlistsinsqlserver.shtml

Для целых чисел можно и гораздо проще: сделайте из них varbinary, затем оно легко разрезается по 4 байта и превращается в таблицу.
Зачем склеивать, чтобы потом всё равно резать?

Да! Говорят, ещё есть тип XML. Правда, это тоже прямое-обратное преобразование...
Сразу таблицу передавать, очевидно, предпочтительнее.
Я тут, у нас на сервере, давно для списка INTов специальный табличный тип сделал.
Делаем функцию или процедуру с параметром этого типа, на клиенте формируем скрипт, в котором
объявляется табличная переменная, заполняется целыми числами и вызывается функция/процедура.
Отправляем скрипт на сервер - вуаля!
12 мар 12, 11:41    [12230211]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
iljy
Member

Откуда:
Сообщений: 8711
iap
Зачем склеивать, чтобы потом всё равно резать?

Ну боится человек табличных типов! А работа с varbinary простая и быстрая.
12 мар 12, 12:02    [12230374]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
Рострига Артур
Member

Откуда:
Сообщений: 200
спасибо
 WHERE col IN (@a, @b, @c)

то что нужно!!
12 мар 12, 12:32    [12230637]     Ответить | Цитировать Сообщить модератору
 Re: группировка по месяцам  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Рострига Артур
спасибо
 WHERE col IN (@a, @b, @c)

то что нужно!!

Ну вот... Научил вас iljy плохому(((. Дата последнего обновления 13-03-05 21:16 для прочитанной вами статьи, а щаз уже вродь как 2012.
12 мар 12, 12:44    [12230755]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить