|
|
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
У меня есть таблица Field1 Field2 .....FieldN Option -------------------------------- 1 1 .... 1 1 10 10 .... 10 2 100 100 .... 100 3 мне нужно "развернуть" ее на 90 гр и показать в таком виде FieldName Option1 Option2 Option3 ---------------------------------------- Field1 1 10 100 Field2 1 10 100 Field3 1 10 100 ..... FieldN 1 10 100 Данные, естественно, только лишь как пример. Может кто сталкивался и уже решал подобные заморочки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2002, 18:47:41 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2002, 18:55:47 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Делается тривиально. Посмотрите операторы PIVOT / UNPIVOT. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2002, 23:13:25 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Извините, поторопился. Хотя, с другой стороны, Вы же не указали версию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2002, 00:36:36 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
SQL 2000 Не нашел в BOL этих операторов. А можно примерчик? Применительно к моеиу вопросу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2002, 02:16:16 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
У меня был подобный вопрос. Посмотри.\r /topic/9171\r Предложенная процедура помогла выйти из положения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2002, 13:05:31 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
BOL: Accessing and Changing Relational Data \ Advanced Query Concepts \ Transact-SQL Tips \ Cross-Tab Reports Там есть пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2002, 13:09:17 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Konst, покажи пример использования это sp для вразения таблицы. Что то я никак сообразить не могу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2002, 20:11:39 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Cross-Tab Reports Sometimes it is necessary to rotate results so that columns are presented horizontally and rows are presented vertically. This is known as creating a PivotTable®, creating a cross-tab report, or rotating data. Assume there is a table Pivot that has one row per quarter. A SELECT of Pivot reports the quarters vertically: Year Quarter Amount ---- ------- ------ 1990 1 1.1 1990 2 1.2 1990 3 1.3 1990 4 1.4 1991 1 2.1 1991 2 2.2 1991 3 2.3 1991 4 2.4 A report must be produced with a table that contains one row for each year, with the values for each quarter appearing in a separate column, such as: Year Q1 Q2 Q3 Q4 1990 1.1 1.2 1.3 1.4 1991 2.1 2.2 2.3 2.4 These are the statements used to create the Pivot table and populate it with the data from the first table: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. This is the SELECT statement used to create the rotated results: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. This SELECT statement also handles a table in which there are multiple rows for each quarter. The GROUP BY combines all rows in Pivot for a given year into a single row in the output. When the grouping operation is being performed, the CASE functions in the SUM aggregates are applied in such a way that the Amount values for each quarter are added into the proper column in the result set and 0 is added to the result set columns for the other quarters. If the results of this SELECT statement are used as input to a spreadsheet, it is easy for the spreadsheet to calculate a total for each year. When the SELECT is used from an application it may be easier to enhance the SELECT statement to calculate the yearly total. For example: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Both GROUP BY with CUBE and GROUP BY with ROLLUP compute the same sort of information as shown in the example, but in a slightly different format. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2002, 12:09:54 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Не совсем. Еще раз: Таблица Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2002, 20:30:48 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Вот работающий код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. Специально "слепил". Так что с Вас 5 баксов :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2002, 22:19:05 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
А вот мой вариант (сырой, т.к. я лечусь в клинике доктора Мензиса "Просто треп"): set nocount on create table t (mat varchar(7), endc varchar(7), ee varchar(7), op int) insert into t (mat,endc,ee,op) values('1','11','111',1) insert into t (mat,endc,ee,op) values('2','22','222',2) insert into t (mat,endc,ee,op) values('3','33','333',3) insert into t (mat,endc,ee,op) values('4','44','444',5) insert into t (mat,endc,ee,op) values('5','55','555',4) declare @i int set @i=1 declare @s varchar(255) set @s='f varchar(7)' while @i<=(select count(*) from t) begin set @s=@s+', op'+cast(@i as varchar(255))+' varchar(7)' set @i=@i+1 end set @s='create table tt ('+@s+')' exec(@s) declare @j int set @j=1 declare @n varchar(255) while @j<(select count(column_name) from information_schema.columns where table_name="t") begin set @n=(select column_name from information_schema.columns where table_name="t" and ordinal_position=@j) insert into tt (f) values(@n) set @j=@j+1 end declare @uu varchar(255) declare @jj int declare @nn varchar(33) declare @ii int set @ii=1 while @ii<(select count(column_name) from information_schema.columns where table_name="t") begin set @jj=1 set @nn=(select column_name from information_schema.columns where table_name="t" and ordinal_position=@ii) while @jj<=(select count(*) from t) begin set @uu='update tt set op' + cast(@jj as varchar(33)) + '=(select ' + @nn + ' from t where op=' + cast(@jj as varchar(33)) + ') where f="' + @nn+ '"' exec(@uu) set @jj=@jj+1 end set @ii=@ii+1 end set nocount off select * from tt drop table t drop table tt ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 01:50:06 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Все бы было хорошо, если бы использовались временные таблицы. Если несколько пользователей попытаются одновременно запустить приведенные выше процедуры - create table tmp - получиться нехорошо. Я попробовал переписать с использованием временной таблицы #tmp , однако врем. табоица создается естественно в tempDB, причем в тамошнем sysobjects ее имя "#tmp_______________12345 (какое-то число)". В sysobjects текущей базы ее нет. Может быть можно каким то образом определить ID созданной врем. таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 05:30:46 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Имелось в виду, что "развернуть" мне надо не всю таблицу целиком, а запрос.(который проще запихать во временную таблицу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 09:14:21 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
дайте более детальное описание исходной таблички..... есть уникальное поле или сочитание полей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 09:18:13 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
>дайте более детальное описание исходной таблички..... >есть уникальное поле или сочитание полей? В данном случае таблицы могут быть самые разные, интересует так сказать общий подход. А для примера ppcIndKey int, CommGenKey int, NPSKey int, Option int – будут уникальными сочетаниями полей. В принципе, следуя вашему примеру и зная какие поля у меня есть, я могу «собирать» insert команды сам, но Ваше решение с syscolumns гораздо более привликательное, жаль что не работает с временной таблицей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 18:34:55 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
а кто вам мешает самому создавать таблици в tempdb? главное уникальность... типа номер сессии+случайное число... а после этого юзайте по сехеме... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 19:44:34 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Да, я думал над этим, только еще не пробовал. Что-то типа создания уникальной врем. таблицы @TmpTable='#Tmp' & SELECT CAST(CAST(RAND()*1000000000 AS INT) AS VARCHAR(20)) В этом случае будет динамический запрос с динамическим запросом внутри, поскольку имя таблицы нужно будет подставлять во время исполнения. from sysobjects a cross join tmp c join syscolumns b on b.id=a.id and b.name<>'Option' where a.name=' tmp ' order by b.colid, c.[Option] Гораздо проще было бы если бы знать id временной таблицы, тогда вместо a.name='tmp' было бы a.id=@id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 20:23:12 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
по моему такая функция и процедура уже есть... завтра покопаюсь ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2002, 20:34:22 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Для SM. Сталкивался и решал подобные заморочки. Да плюньте Вы на все эти извраты. Что вам нужно? Иметь эту табличку на все времена? И по ней будут делатся другие запросы? Сомневаюсь. Скорее всего нужно что бы юзер полюбовался на развернутую табличку. В дельфах, например, это можно, сделать загнав данные в StringGrid. Ведь не 1000х1000 у Вас будет. А хоть бы и такая. Пускай клиент отдувается. У него рожа толстая - 800 МГц. Пишу без захода в дельфу и проверки, так что могут быть всякие ошибки. На форме компонента TStringGrid, имя S. Так же имеется результат запроса Q. S.rowcount:=Q.FieldCount; S.colcount:=Q.RecordCount+1; S.FixedRows:=1; S.FixedCols:=1; for row:=1 to Q.FieldCount-1 do S.Cells[0,row]:=Q.Fields[row-1].FieldName; col:=1; while not Q.eof do begin S.Cells[col,0]:='Option '+Q.FieldByName('Options').asString; for row:=1 to Q.FieldCount-1 do S.Cells[col,row]:=Q.Fields[row-1].asString; inc(col); Q.next; end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 00:09:38 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Молодец, Кэт2! Мочи их всех - ламеров этих, - и своих и заморских. Кстати, объясните мне, самому крупному Ламеру, как будут развиваться события, если перед блоком: create table tmp (без #) ...... ...... drop table tmp делать проверку на существование таблы "tmp". Т.е. так, если какой-то юзер в данный момент уже создал эту таблу, но не успел её дропнуть, то воспользоваться уже готовой. Иначе, создавать самому. Я после электрошока плохо (совсем) соображаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 00:22:56 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
OFF. Для Rattail. Это у тебя в базе что, филиал дурдома? Твои юзеры имеют право создавать нормальные таблички ? Болезнь очень запущена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 07:43:54 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
2Cat2 В моей базе, Брут, возможно всё. Поелику не страдам я паранойей в открытой форме. А ты всё думаешь, что не выдь ты завтра на работу, так и рубель российский на 30 пунктов упадет. Ты лучче послушат об чём люд рабочий гуторит на ихних тусовках: кровопивец ты (и бухгалтерия) для них. У меня т всё по-ленински: сами рабочие себе проц. премии вручну вводят в кабинках для тайного голосовання. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 10:07:52 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
да и ваще.... изврат это все.... если нуно универсально используйте OLAP .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 12:23:26 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Мда, олапа мне тут только и не хватало... Что до задачки, это конечно изврат, но уж больно удобно для конечного пользовтеля - дело в том, что инфа в таблице про инженерный компонент, и Option - это соответственно вариации - немного другой мартериал, рабочее давление, толщина стенок.... Всего значимых полей больше 10. Посмотреть на всю эту картину в разрезе опций одновременно - просто слюнки течь начинают у пользовтелей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 18:21:52 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32039524&tid=1821380]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 339ms |

| 0 / 0 |
