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

Откуда:
Сообщений: 16
Добрый день!
Существует таблица "Номер Абонента", "Тарифный план", "Дата начала", "Дата окончания"
Необходимо сделать выборку:
"Номер Абонента", "Тарифный план"1, "Дата начала"1, "Тарифный план"2, "Дата начала"2 -...-"Тарифный план"N, "Дата начала"N

Прочитал несколько статей из FAQ, но результата не добился, подскажите, пожалуйста.
Столбцов план-дата будет немного, не более 5.
14 окт 09, 10:35    [7782815]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Pelm
Прочитал несколько статей из FAQ, но результата не добился


Как пробовали?

Pelm
подскажите, пожалуйста.


перечитать статьи вслух?!
14 окт 09, 10:36    [7782823]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Pelm
Member

Откуда:
Сообщений: 16
статья из фака https://www.sql.ru/faq/faq_topic.aspx?fid=571
но повторяется только один столбец, в нашем случае необходимо парами.
14 окт 09, 10:39    [7782849]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
DENIS_CHEL
Member

Откуда:
Сообщений: 23097
Вы FAQ внимательно читали? А рекомендации по оформлению топиков видели? Версия сервера какая (
SELECT @@VERSION
)?

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум..
14 окт 09, 10:39    [7782851]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Pelm
Member

Откуда:
Сообщений: 16
DENIS_CHEL
Вы FAQ внимательно читали? А рекомендации по оформлению топиков видели? Версия сервера какая (
SELECT @@VERSION
)?

---------------------------------------------------------
- Ну вы тут и нафлудили! - сказал Геракл, зайдя на Авгиев форум..


простите, забыл. MS SQL 2000
14 окт 09, 10:41    [7782865]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pelm
статья из фака https://www.sql.ru/faq/faq_topic.aspx?fid=571
но повторяется только один столбец, в нашем случае необходимо парами.

И в чем проблема расширить число столбцов ?
14 окт 09, 10:41    [7782875]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Pelm
Столбцов план-дата будет немного, не более 5.
Странное ограничение какое-то
Интересно, по какой формуле было подсчитано число 5?

А что будет если какой-то настырный абонент перепробует 6 разных тарифных планов?

И еще более интересно, что должен вернуть запрос, если абонент сменил "план 1" на "план 2",
а потому ему не понравилось, и он вернулся обратно на "план 2" ?
14 окт 09, 10:44    [7782901]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
*обратно на "план 1" (извините, очепятка)
14 окт 09, 10:46    [7782916]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Pelm
Member

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

Что-то не получается сообразить, как расширить количество столбцов.
14 окт 09, 10:47    [7782922]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pelm

Что-то не получается сообразить, как расширить количество столбцов.

Продублировать конструкцию которая создает первый столбец ??
14 окт 09, 10:49    [7782938]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Pelm
Member

Откуда:
Сообщений: 16
Glory
Pelm

Что-то не получается сообразить, как расширить количество столбцов.

Продублировать конструкцию которая создает первый столбец ??

первый столбец - абонент, а потом парами тариф-дата
14 окт 09, 10:49    [7782941]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pelm
Glory
Pelm

Что-то не получается сообразить, как расширить количество столбцов.

Продублировать конструкцию которая создает первый столбец ??

первый столбец - абонент, а потом парами тариф-дата

Да хоть "объем талии"
14 окт 09, 10:50    [7782950]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Pelm
Member

Откуда:
Сообщений: 16
Glory
Pelm
Glory
Pelm

Что-то не получается сообразить, как расширить количество столбцов.

Продублировать конструкцию которая создает первый столбец ??

первый столбец - абонент, а потом парами тариф-дата

Да хоть "объем талии"

Ткните носом, у меня "затмение"
14 окт 09, 10:52    [7782957]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pelm

Ткните носом, у меня "затмение"

Я не могу никуда ткнуть, потому что вы скрываете свой программный код
14 окт 09, 10:53    [7782966]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Pelm
Ткните носом, у меня "затмение"


Пожалуйста: Рекомендации по оформлению сообщений в форуме п.6
14 окт 09, 10:53    [7782973]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Pelm
Member

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

Абонент План Дата
1_______20___2009-01-01
1_______30___2009-05-01
2_______20___2009-02-01
2_______40___2009-03-01
2_______30___2009-05-01

Привести к виду:

Абонент_План_Дата_______План___Дата______План___Дата
1_______20___2009-01-01__30___2009-05-01
2_______20___2009-02-01__40___2009-03-01___30___2009-05-01
14 окт 09, 11:01    [7783043]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Pelm
Member

Откуда:
Сообщений: 16
Использую указанную выше ссылку https://www.sql.ru/faq/faq_topic.aspx?fid=571


create procedure dbo.sp_transform
@Table sysname,
@Rows varchar(1024),
@Cols sysname,
@RowValue sysname,
@Function sysname,
@DestTable sysname = null,
@UsedRows varchar(1024) = null
as
begin
set nocount on

declare @sql nvarchar(4000)
declare @Key varchar(100)
declare @newline char(1)

set @newline = char(10)

if @UsedRows is null
begin
set @sql = N'select distinct ' + @Cols + N' as keys into ##transform_keys from ' + @Table + ' order by ' + @Cols
exec sp_executesql @sql
end
else
begin
declare @i int
declare @row sysname
set @i = charindex(',', @UsedRows)
create table ##transform_keys (keys sysname primary key)
while @i <> 0
begin
set @row = ltrim(rtrim(substring(@UsedRows, 1, @i-1)))
set @UsedRows = ltrim(rtrim(substring(@UsedRows, @i+1, len(@UsedRows))))

if (@row is not null) and (@row <> '')
insert into ##transform_keys values (@row)

set @i = charindex(',', @UsedRows)
end
if (@UsedRows is not null) and (@UsedRows <> '')
insert into ##transform_keys values (@UsedRows)
end

set @sql = 'select ' + @Rows + @newline

set @Key = null
select top 1 @Key = keys from ##transform_keys

while @Key is not null
begin
set @sql = @sql + ','+@Function+'(case when convert(varchar,' + @Cols + ')=convert(varchar,''' + @Key + ''') then ' + @RowValue + ' else Null end) [' + @Key + ']' + @newline
--print @sql

delete from ##transform_keys where keys = @Key
set @Key = null
select top 1 @Key = keys from ##transform_keys
end

if @DestTable is not null
set @sql = @sql + 'into ' + @DestTable + @newline
set @sql = @sql + 'from ' + @Table + @newline + 'group by ' + @Rows + @newline + 'order by ' + @Rows

print @sql
exec sp_executesql @sql

drop table ##transform_keys
end


exec sp_transform
@Table sysname, --<имя таблицы с исходными данными>
@Rows varchar(1024), --<столбцы результирующего набора,разделенные запятой>
@Cols sysname, --<трансформируемый столбец>
@RowValue sysname, --<столбец значений>
@Function sysname, --<агрегатная функция (sum,count,avg,...)>
@DestTable sysname = null, --[имя таблицы для записи результата]
@UsedRows varchar(1024) = null --[Набор трансформируемых столбцов, разделенных запятой]
14 окт 09, 11:02    [7783053]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Pelm
Member

Откуда:
Сообщений: 16
возможно порекомендуете более удобные решения данной задачи?
14 окт 09, 11:05    [7783080]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Pelm
возможно порекомендуете более удобные решения данной задачи?


Я бы задумался о смысле самой задачи, ибо представление данных в указанном Вами виде, как миниму удобочитаемо, а учетом того, что пар план\дата для разных абонентов будет много, то портянка вытянется по горизонтали.
14 окт 09, 11:07    [7783098]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Обязательно ли эти План_Дата...План___Дата... должны быть отдельными колонками?

Может, для отчета, который от Вас требуют, подойдет слить все это дело в одну текстовую колонку,
в которой будут пары "План_Дата" просто перечислены через разделитель
(запятая там или табуляция...)
?
14 окт 09, 11:10    [7783120]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Glory
Member

Откуда:
Сообщений: 104760
Pelm
возможно порекомендуете более удобные решения данной задачи?

https://www.sql.ru/faq/faq_topic.aspx?fid=358
14 окт 09, 11:10    [7783124]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Pelm
Member

Откуда:
Сообщений: 16
pkarklin
Pelm
возможно порекомендуете более удобные решения данной задачи?


Я бы задумался о смысле самой задачи, ибо представление данных в указанном Вами виде, как миниму удобочитаемо, а учетом того, что пар план\дата для разных абонентов будет много, то портянка вытянется по горизонтали.

Как и писал, портянка будет не длинной.
Хотелось бы решить задачу в сформулированном ключе.

Поделитесь вашим мнением, как даннуе было бы удобнее представить.
14 окт 09, 11:10    [7783125]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Как и писал, портянка будет не длинной.


Откуда такие выводы?! У Вас тариф можно менять только в определенные дни?

автор
Поделитесь вашим мнением, как даннуе было бы удобнее представить.


Тогда огласите какие решения должны быть приняты человеком на основе анализа этих данных.
14 окт 09, 11:14    [7783162]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Pelm
Member

Откуда:
Сообщений: 16
Паганель
Обязательно ли эти План_Дата...План___Дата... должны быть отдельными колонками?

Может, для отчета, который от Вас требуют, подойдет слить все это дело в одну текстовую колонку,
в которой будут пары "План_Дата" просто перечислены через разделитель
(запятая там или табуляция...)
?

Если так будет удобнее, то наверное можно попробовать сделать.
14 окт 09, 11:14    [7783166]     Ответить | Цитировать Сообщить модератору
 Re: Перекрёстный запрос?  [new]
Pelm
Member

Откуда:
Сообщений: 16
pkarklin
автор
Как и писал, портянка будет не длинной.


Откуда такие выводы?! У Вас тариф можно менять только в определенные дни?

автор
Поделитесь вашим мнением, как даннуе было бы удобнее представить.


Тогда огласите какие решения должны быть приняты человеком на основе анализа этих данных.


Я так понял аналитик хочет проследить миграцию абонентов на тарифных планах.
Да, тариф меняется раз в месяц.
14 окт 09, 11:15    [7783178]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить