powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как развернуть таблицу (имена полей неизвестны)
6 сообщений из 6, страница 1 из 1
Как развернуть таблицу (имена полей неизвестны)
    #39515160
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !

Имею таблицу T1
F0 F1 F2 R1 100 200

Получить результат
F0 KEY VAL R1 F1 100R1 F2 200

Возможный запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select  A.F0,
          B.F1,
          iif(B.F1='F1',A.F1,iif(B.F1='F2',A.F2,Null)) F2
   from T1  A
 inner join (select 'F1' F1 from TEMP
                 union all
                 select 'F2' F1 from TEMP
               ) B
  on (1=1)



НО !!!!!!!
Проблема в том что список полей мне неизвестен (T1 это книга Excel - пользователь может менять имена полей их кол-во)
Список и названия полей я реально достать могу в виде строки 'F1','F2'...
(select 'F1' F1 from TEMP
union all
select 'F2' F1 from TEMP
) B

Но обработчик прийдется все время дописывать руками
iif(B.F1='F1',A.F1,iif(B.F1='F2',A.F2, .................................... )) F2

Есть ли еще варианты развернуть таблицу ?
Может в Microsoft Jet (использую его) есть возможность сослаться на поле таблицы через строку

Т.е. так
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select  A.F0,
          B.F1,
          A.Fields(B.F1) F2
   from T1  A
 inner join (select 'F1' F1 from TEMP
                 union all
                 select 'F2' F1 from TEMP
               ) B
  on (1=1)



Заранее благодарен !
...
Рейтинг: 0 / 0
Как развернуть таблицу (имена полей неизвестны)
    #39515489
HOME_X, для начала объясните для какой цели вам нужен такой результат. И еще напоминаю, что количество секций в UNION запросе ограничено (что-то вроде 14 или 19).
...
Рейтинг: 0 / 0
Как развернуть таблицу (имена полей неизвестны)
    #39515493
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XT1 это книга Excel - пользователь может менять имена полей их кол-во
Что он точно НЕ может менять? к чему можно привязаться-то?

Анатолий ( Киев )для начала объясните для какой цели вам нужен такой результат.
И почему это нужно сделать именно запросом, а не модулем.
...
Рейтинг: 0 / 0
Как развернуть таблицу (имена полей неизвестны)
    #39515523
HOME_X ,

если я правильно понял, вам нужен запрос вида
Код: sql
1.
2.
3.
select [f0],'F1' as [KEY],[f1] as [VAL] from [T1] union all 
select [f0],'F2' as [KEY],[f2] as [VAL] from [T1] union all 
select [f0],'F3' as [KEY],[f3] as [VAL] from [T1] ...


если состав полей заранее неизвестен, такой текст можно получить программно по фактическому списку полей исходной таблицы

Анатолий ( Киев )И еще напоминаю, что количество секций в UNION запросе ограничено (что-то вроде 14 или 19).сделал 50 (MSA2000), дальше - 'Слишком сложный запрос'
...
Рейтинг: 0 / 0
Как развернуть таблицу (имена полей неизвестны)
    #39515632
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
непоймучкасделал 50 (MSA2000), дальше - 'Слишком сложный запрос'

сделайте рабочую таблицу с полями f0,key,val
затем примерно так

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
''затем программно
dim s1,kp
s1="delete * from rab1"
currentdb.execute s1
''затем циклом по вашей таблице
kp=0
for each fld in tab1.field
kp=kp+1
if kp>1 then
s1="insert into rab1( f0,key,val)
s1=s1 & " select f0,'" & fld.name & "'," & fld.name & "  from tab1"
currentdb.execute s1
endif
next fld
...
Рейтинг: 0 / 0
Как развернуть таблицу (имена полей неизвестны)
    #39515650
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подправила немного
Код: vbnet
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.
Option Compare Database
Option Explicit


Public Sub mm170905()
''затем программно
Dim s1, kp
Dim fld As DAO.Field
Dim dbs As DAO.Database
s1 = "delete * from rab1"
CurrentDb.Execute s1
''затем циклом по вашей таблице
kp = 0
Set dbs = CurrentDb
For Each fld In dbs.TableDefs("tab1").Fields
kp = kp + 1
Debug.Print kp, fld.Name
If kp > 1 Then
s1 = "insert into rab1( f0,key,val)"
s1 = s1 & " select f0,'" & fld.Name & "'," & fld.Name & "  from tab1"
Debug.Print " select f0,'" & fld.Name & "'," & fld.Name & "  from tab1"

CurrentDb.Execute s1
End If
Next fld
End Sub
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как развернуть таблицу (имена полей неизвестны)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]