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

Откуда: Нефтекамск
Сообщений: 10
Необходим запрос, в котором количество колонок будет переменным.

Для примера: есть предприятие, состоящее из нескольких подразделений, в каждом подразделении есть некоторое количество(не одинаковое) производств, цехов, участков и тд. И, например, в таблице содержится зарплата по данным производствам. Выбирается подразделение и в запросе, в качестве столбцов выступают названия производств, входящих в это подразделение. Соответственно в строках цифры с зарплатами

Насколько я понял, это делается через динамический запрос. Саму идею динамического запроса я понял, но как применить его конкретно к моей задаче не знаю:(
27 дек 05, 19:09    [2214395]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Уууууу....
Вам бы в "проектирование"... Или про реляционные базы почитать...
Хотя... SQL 2005 + PIVOT...
27 дек 05, 19:16    [2214411]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Нагимов Тимур
Member

Откуда: Нефтекамск
Сообщений: 10
База на sql2000
27 дек 05, 19:20    [2214419]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Max Shtirlic
Member

Откуда:
Сообщений: 68
Ну, это стандартный Pivot.
Но, как показывает практика, пиваты легшее закручивать на клиенте т.к.
Если это необходимо делать именно на сервере, то почитайте в BOL про пиват.
27 дек 05, 19:24    [2214428]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Нагимов Тимур
База на sql2000


тогда делать все фиксированным резалтсетом и разворачивать строки в столбцы на клиенте в отчете
27 дек 05, 19:28    [2214435]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Нагимов Тимур
Выбирается подразделение и в запросе, в качестве столбцов выступают названия производств, входящих в это подразделение. Соответственно в строках цифры с зарплатами

Насколько я понял, это делается через динамический запрос. Саму идею динамического запроса я понял, но как применить его конкретно к моей задаче не знаю:(

Вас не зря посылают почитать про проектирование баз. Не должны производства быть столбцами, от этого у вас и гемор. Строчками должны быть.
27 дек 05, 19:37    [2214452]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Нагимов Тимур
Member

Откуда: Нефтекамск
Сообщений: 10
GreenSunrise
Вас не зря посылают почитать про проектирование баз. Не должны производства быть столбцами, от этого у вас и гемор. Строчками должны быть.


Столбцами они нужны в одном из отчетов, в самой таблице они хранятся в строках, т.е упрощенная структура примерно такая:[производство],[зарплата первой категории],[зарплата второй категории] и тд. Есть довольно большое количество отчетов, в том числе несколько, построенных на запросе, который мне требуется.

Одним глазом глянул первое что попалось про Pivot, там пример с фиксированным кол-вом колонок. Еще посмотрю, может и поможет. Хочется увидеть еще предложения и примеры.
27 дек 05, 19:56    [2214477]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Так вычитывать строками, а в отчете ПОКАЗЫВАТЬ столбцами.
В итоге отчетная проца будет ОДНА, шаблонов - несколько. Все просто и естественно для реляционной модели :)
27 дек 05, 20:05    [2214490]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Нагимов Тимур
Member

Откуда: Нефтекамск
Сообщений: 10
Crimean
Так вычитывать строками, а в отчете ПОКАЗЫВАТЬ столбцами.
В итоге отчетная проца будет ОДНА, шаблонов - несколько. Все просто и естественно для реляционной модели :)


Все просто и естественно, если знаешь каким образом это сделать. я, к сожалению, пока этого не знаю и надеюсь это здесь узнать
27 дек 05, 20:07    [2214493]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Max Shtirlic
Member

Откуда:
Сообщений: 68
Нет, стоп. Чем не устраивает вариант с разворотом пивата на клиенте? Клиент на чем пишите?
27 дек 05, 20:15    [2214506]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Max Shtirlic
Member

Откуда:
Сообщений: 68
Max Shtirlic
Нет, стоп. Чем не устраивает вариант с разворотом пивата на клиенте? Клиент на чем пишите?

Ну, иль сам отчет в чем рисуете?
27 дек 05, 20:16    [2214507]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895

Испоьзуйте Pivot Tables в Excel. Отличный инструмент для представления сводных таблиц на клиенте.


Posted via ActualForum NNTP Server 1.3

27 дек 05, 20:18    [2214513]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Нагимов Тимур
Member

Откуда: Нефтекамск
Сообщений: 10
Есть система такая, фирма Экософт, продукт Лексема. Написана на Делфи. Отчеты делаются в программе, которая поставляется вместе с системой, называется Rmaker(есть возможность делать отчеты в exel).

Еще раз повторюсь. Меня устроит любой вариант, который вы опишите. Я просто не представляю как это сделать.
27 дек 05, 20:29    [2214540]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
RENaissance
Member

Откуда: Муром->Москва
Сообщений: 10895

Ну так экспортируйте в Excel линейный набор, а потом макросом разворачивайте в сводную таблицу.


Posted via ActualForum NNTP Server 1.3

27 дек 05, 20:32    [2214546]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Нагимов Тимур
Есть система такая, фирма Экософт, продукт Лексема. Написана на Делфи. Отчеты делаются в программе, которая поставляется вместе с системой, называется Rmaker(есть возможность делать отчеты в exel).

Еще раз повторюсь. Меня устроит любой вариант, который вы опишите. Я просто не представляю как это сделать.


так может того, к разработчикам "Лексема" за примерами?
27 дек 05, 20:43    [2214573]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1842
Если можете прочитать текст С++ (CBuilder), то могу прислать класс для работы с Excel. В частности там есть то, о чем пишет RENaissance. Пишите на mail. Сюда могу и не заглянуть.
28 дек 05, 06:33    [2214974]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1873
declare @Departments table(DepartmentID int,ParentID integer,Name varchar(20))
insert into @Departments values(1,null,'Подразделение1')
insert into @Departments values(2,null,'Подразделение2')
insert into @Departments values(3,null,'Подразделение3')
insert into @Departments values(11,1,'Цех1')
insert into @Departments values(12,1,'Производство1')
insert into @Departments values(13,1,'Производство11')
insert into @Departments values(21,2,'Цех2')
insert into @Departments values(22,2,'Производство21')
insert into @Departments values(33,3,'Производство31')
create table #Salary (DepartmentID integer,[Month] integer,[Sum] money)
insert into #Salary values(11,1,1)
insert into #Salary values(11,2,2)
insert into #Salary values(12,1,12)
insert into #Salary values(12,2,11)
insert into #Salary values(13,1,100)
insert into #Salary values(13,2,120)
insert into #Salary values(21,1,1000)
insert into #Salary values(21,2,1000)
insert into #Salary values(22,1,120)
insert into #Salary values(33,1,2000)
insert into #Salary values(33,2,2000)
declare @sql varchar(8000)

select @sql = ''
select @sql = @sql+
',max(case when [DepartmentID]='+cast(d1.DepartmentID as varchar(10))+
'then [Sum] else null end) as ['+d1.[name]+']'
from @Departments d1
join @Departments d2 on d1.ParentID=d2.DepartmentID
where d2.[Name]='Подразделение1'
exec('select [Month]'+@sql+'from #Salary group by [Month]')

select @sql = ''
select @sql = @sql+
',max(case when [DepartmentID]='+cast(d1.DepartmentID as varchar(10))+
'then [Sum] else null end) as ['+d1.[name]+']'
from @Departments d1
join @Departments d2 on d1.ParentID=d2.DepartmentID
where d2.[Name]='Подразделение2'
exec('select [Month]'+@sql+'from #Salary group by [Month]')

select @sql = ''
select @sql = @sql+
',max(case when [DepartmentID]='+cast(d1.DepartmentID as varchar(10))+
'then [Sum] else null end) as ['+d1.[name]+']'
from @Departments d1
join @Departments d2 on d1.ParentID=d2.DepartmentID
where d2.[Name]='Подразделение3'
exec('select [Month]'+@sql+'from #Salary group by [Month]')

drop table #Salary

28 дек 05, 07:37    [2215014]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Нагимов Тимур
Member

Откуда: Нефтекамск
Сообщений: 10
Большое спасибо, как раз то, что было нужно.
28 дек 05, 21:43    [2218538]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Запрос с переменным количесвом столбцов  [new]
Алексей2009
Guest
А если @sql превышает 8000 символов, как можно разделить строку на несколько запросов?
11 сен 09, 12:28    [7646943]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Glory
Member

Откуда:
Сообщений: 104760
Алексей2009
А если @sql превышает 8000 символов, как можно разделить строку на несколько запросов?

Создать много-мгого переменных по 8000 символов каждая
11 сен 09, 12:32    [7646960]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Купить SQL 2008, и не мучиться!
11 сен 09, 12:33    [7646969]     Ответить | Цитировать Сообщить модератору
 Re: Запрос с переменным количесвом столбцов  [new]
Konst_One
Member

Откуда:
Сообщений: 11515
olap юзайте ,а то скоро вы с этими запросами всю работу на предприятии остановите
11 сен 09, 12:38    [7646995]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить