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

Откуда: Оттуда
Сообщений: 481
Добрый день. Знаю что есть куча ФАКов и статей на эту тему, но не нашел то что мне нужно поэтому обращаюсь тут.

есть 2 таблицы. стандартными case не обойтись так как строк в таблицах море.

Товары
1 a
2 b
3 a
4 c
....
n-1 z

производители
a ООО
b ОАО
с ЗАО
....
z ГГГ

Хочу получить
a b c ... z
1 x
2 x
3 x
4 x
...
n-1 x

Версия SQL server 2000 и выше. Но поддержать надо все.

Как такое сделать?
10 окт 11, 16:03    [11413943]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
_Groxot_
Member

Откуда: Оттуда
Сообщений: 481
Хочу получить
   a b c ... z
1 x
2    x 
3 x
4      x
...
n-1           x
10 окт 11, 16:04    [11413956]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
_Groxot_
Member

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

Сделать Pivot на SQL Server 2000 с неограниченным числом столбцов и строк... Такое возможно?
10 окт 11, 16:18    [11414098]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
_Groxot_
Знаю что есть куча ФАКов и статей на эту тему, но не нашел то что мне нужно поэтому обращаюсь тут.

И вы думаете, что нужен отдельный ФАК/статья по вашему случаю ?
10 окт 11, 16:22    [11414150]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
_Groxot_
Member

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

Нет, но в стандартном ФАК описанны случаи с зараненее известным числом столбцов...
А у меня немного отличающаяся ситуация.
10 окт 11, 16:23    [11414172]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
iljy
Member

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

7243958
10 окт 11, 16:23    [11414177]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
_Groxot_
Нет, но в стандартном ФАК описанны случаи с зараненее известным числом столбцов..

Да что вы говорите
10 окт 11, 16:26    [11414201]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
_Groxot_
Как такое сделать?
Временными таблицами.

_Groxot_
Знаю что есть куча ФАКов и статей на эту тему, но не нашел то что мне нужно

Пример в ФАК-е :-)
10 окт 11, 16:27    [11414213]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
_Groxot_
Member

Откуда: Оттуда
Сообщений: 481
iljy
_Groxot_,

7243958


The identifier that starts with '.....................' is too long. Maximum length is 128.
10 окт 11, 16:40    [11414397]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
_Groxot_
The identifier that starts with '.....................' is too long. Maximum length is 128.

Название столбца не может быть больше 128 байт
10 окт 11, 16:43    [11414434]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
_Groxot_
iljy
_Groxot_,

7243958


The identifier that starts with '.....................' is too long. Maximum length is 128.
За вас программу никто писать не будет.

Вам просто дают идею и образец кода.

А вы сами отладьте - например, распечатайте получившийся текст SQL -запроса, всё сразу увидите.
10 окт 11, 16:47    [11414480]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
_Groxot_
Member

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

Дело в том что уменьшить длинну я не могу. А значит использовать EXEC(@Sql) тоже.
А значит строить запрос в запросе так же нельзя.

Я не прошу готовых решений.
Я прошу толкнуть в нужную сторону.

Варианты которые я нашел мне не подошли...
10 окт 11, 16:51    [11414539]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
_Groxot_
Дело в том что уменьшить длинну я не могу. А значит использовать EXEC(@Sql) тоже

Сервер имеет документированные ограничения
Если вы не можете их выполнить, то ваша задача нерешаема
Только причем тут EXEC
10 окт 11, 16:53    [11414562]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
iljy
Member

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

а зачем вам такие длиннющие идентификаторы? Назначьте псевдонимы в конце концов.
10 окт 11, 16:55    [11414589]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
_Groxot_
alexeyvg,

Дело в том что уменьшить длинну я не могу. А значит использовать EXEC(@Sql) тоже.
А значит строить запрос в запросе так же нельзя.

Я не прошу готовых решений.
Я прошу толкнуть в нужную сторону.

Варианты которые я нашел мне не подошли...
Ограничения есть в данном случае не на длинну для EXEC(@Sql), а для SQL Server. Поэтому задача в лоб не решается никак.

Поэтому решите проблему правильным построением бизнес-требований. Например, используйте сокращения для имён будущих полей.

Или делайте пивот на клиенте.
10 окт 11, 17:00    [11414649]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
_Groxot_
Member

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

попробовал использовать "цыфирки". Все равно вылазит. Там около тысячи идентификаторов. + запрос для выборки еще около тысячи символов.
10 окт 11, 17:03    [11414677]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
Glory
Member

Откуда:
Сообщений: 104751
_Groxot_
Там около тысячи идентификаторов. + запрос для выборки еще около тысячи символов.

Ну так пример из ФАК, который по вашему утверждению вам не подходит, расчитан на запрос длиной 80Кб
10 окт 11, 17:09    [11414749]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
_Groxot_,

подключите Analysis Services , сделайте куб с двумя мерами и одним измерением, вот вам и грёбаннаялюбимая шахматка.
И выбирайте из неё как угодно, скольугодно строк.
10 окт 11, 17:38    [11415071]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
_Groxot_
попробовал использовать "цыфирки". Все равно вылазит. Там около тысячи идентификаторов. + запрос для выборки еще около тысячи символов.
Куда кто вылазит???

Ошибка о недопустимой длинне одного идентификатора.
10 окт 11, 17:43    [11415124]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
Начинающий SQL 2008
Member

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

Переменная типа varchar(8000). А если нужно больше???

Перекрестный запрос Много столцов
11 окт 11, 10:03    [11417540]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
_Groxot_
Member

Откуда: Оттуда
Сообщений: 481
Начинающий SQL 2008,

Спасибо, помогло!

Остался еще вопрос...
Я в запросе говорю
Select t2.num,t2.dum,t2.rum, table1.* from table1 left join...
и все ок...
А хотелось бы еще
Select t2.num,t2.dum,t2.rum, SUM(table1.*) from table1 left join...
Group by t2.num,t2.dum,t2.rum

--Только не все столбцы а каждый по отдельности ... Реально?
11 окт 11, 10:52    [11417848]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
_Groxot_
Member

Откуда: Оттуда
Сообщений: 481
_Groxot_
Начинающий SQL 2008,

Спасибо, помогло!

Остался еще вопрос...
Я в запросе говорю
Select t2.num,t2.dum,t2.rum, table1.* from table1 left join...
и все ок...
А хотелось бы еще
Select t2.num,t2.dum,t2.rum, SUM(table1.*) from table1 left join...
Group by t2.num,t2.dum,t2.rum

--Только не все столбцы а каждый по отдельности ... Реально?


Поясню Table1 это и есть результат перекрестного запроса. Кол-во столбцов неизвестно...
11 окт 11, 10:58    [11417893]     Ответить | Цитировать Сообщить модератору
 Re: Pivot SqlServer 2000  [new]
Начинающий SQL 2008
Member

Откуда:
Сообщений: 438
_Groxot_
Кол-во столбцов неизвестно
Получить список столбцов у таблицы можно таким запросом:
select syscolumns.[name]
from syscolumns 
inner join sysobjects on syscolumns.id = sysobjects.id 
where sysobjects.[name] = 'MyTable'
order by syscolumns.[name]

Далее, динамический SQL наподобие этого:
10377620
12 окт 11, 11:36    [11425348]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить