|
|
|
Можно ли "развернуть" таблицу на 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 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Мое слово "изврат" относилось не к задаче, а к попыткам сделать ее через SQL. Задача вполне нормальная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 19:10:12 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Значит изврат - это попытки, а пытающийся - извращенец? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 19:26:53 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
то SM... так олап для этого самое хорошое решение... можеш поюзать попроще.. кажется в MSOffice есть компонет... упрощенный ... но пойдет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 19:31:22 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Нет, это попытки решить задачу негодными средствами. Я то же склоняюсь к OLAP, но пока не слишком хорошо знаю эту штуковину, так что советовать не рискнул. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 19:44:37 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
OLAP хорош будет для аналитики/статистики. Тут же оперативная работа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 19:58:43 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
я когдато делал на клинте такие штуки... и использовал таки компонент от офиса... людям нравилось ;)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2002, 20:23:43 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Был вопрос как - определить id временной таблицы. В Sybase есть ф-ция object_id('имя_объекта'), не уверен, что она есть в MS SQL, но вполне возможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2002, 17:59:59 |
|
||
|
Можно ли "развернуть" таблицу на 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2002, 23:41:23 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
я подобное тоже делал на клиенте. Только с сервера отдаю два рекордсета: один - описание того, какие поля являются заголовками строк, какое поле является заголовком столбцов, а какое поле является значением, а второй рекордсет - собственно сами данные. "Пара" строк кода по этой инфе строят грид как надо и его заполняют. Все достаточно просто... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2002, 14:40:54 |
|
||
|
Можно ли "развернуть" таблицу на 90 гр?
|
|||
|---|---|---|---|
|
#18+
Вот еще один пример: -- ------------------------------------------------- -- используемые таблицы create table table1 (date datetime, value int); create table table2 (date datetime, value int); create table table3 (date datetime, value int); -- ---------------------------------------------------- -- данные в таблицах -- select * from table1 -- date value -- --------------------------- ----------- -- 2002-01-10 00:00:00.000 12 -- 2002-01-12 00:00:00.000 14 -- 2002-01-11 00:00:00.000 12 -- -- (3 row(s) affected) -- select * from table2 -- date value -- --------------------------- ----------- -- 2002-01-10 00:00:00.000 5 -- 2002-01-11 00:00:00.000 10 -- -- (2 row(s) affected) -- select * from table3 -- date value -- --------------------------- ----------- -- 2002-02-12 00:00:00.000 5 -- -- (1 row(s) affected) -- ------------------------------------------------------------------------------- -- запрос выборки по таблицам -- ------------------------------------------------------------------------------- if exists (select * from sysobjects where name='dts' and xtype='U') drop table dts; -- ------------------------------------------------------------------------------- select date, null as value1, null as value2, null as value3 into dts from table1 union select date, null as value1, null as value2, null as value3 from table2 union select date, null as value1, null as value2, null as value3 from table3; -- ------------------------------------------------------------------------------- update dts set value1=table1.value from table1 where dts.date=table1.date; update dts set value2=table2.value from table2 where dts.date=table2.date; update dts set value3=table3.value from table3 where dts.date=table3.date; -- ------------------------------------------------------------------------------- -- проверка результата select * from dts; -- полученный результат -- date value1 value2 value3 -- --------------------------- ----------- ----------- ----------- -- 2002-01-10 00:00:00.000 12 5 NULL -- 2002-01-11 00:00:00.000 12 10 NULL -- 2002-01-12 00:00:00.000 14 NULL NULL -- 2002-02-12 00:00:00.000 NULL NULL 5 -- -- (4 row(s) affected) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2002, 15:40:26 |
|
||
|
|

start [/forum/search_topic.php?author=Guest+06aug&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 1174ms |
| total: | 1294ms |

| 0 / 0 |
