|
Можно ли развернуть данные из 2 стлб. табл. как массив MxN?
|
|||
---|---|---|---|
#18+
Приветствую! Есть таблица t1(sct_id, top_id) . Есть др. тбл. t2(sct_id, cnt) . Возник вопрос: можно ли получить t1 и t2 в виде: cnt(sct_id, top_id) , т.е. в виде массива, по одному измерению которого были бы top_id , по другому - sct_id , а на их пересечениях - соответствующее значение cnt ? !!!ЗАДАЧА заключается в том, что мне необходимо заполнить таблицы таким образом, чтобы не было бы различных sct_id , в которых состав top_id был бы одинаков. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2001, 12:24 |
|
Можно ли развернуть данные из 2 стлб. табл. как массив MxN?
|
|||
---|---|---|---|
#18+
Насколько я понял, то называется это Cross-Tab Query и одним запросом на сервере это можно сделать если заранее известно количество столбцов. Вроде такого запроса SELECT t1.sct_id, CASE t1.top_id=1 THEN t2.cnt ELSE 0 END AS R1, CASE t1.top_id=2 THEN t2.cnt ELSE 0 END AS R2, CASE t1.top_id=3 THEN t2.cnt ELSE 0 END) AS R3,....... FROM t1 INNER JOIN t2 ON t2.sct_id = t1.sct_id ORDER BY t1.sct_id Из клиентских приложений Cross-Tab Query точно реализованы в Access-е. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2001, 13:09 |
|
Можно ли развернуть данные из 2 стлб. табл. как массив MxN?
|
|||
---|---|---|---|
#18+
2 Николай А не могли бы Вы это показать как-нибудь на примере? Со значениями таблиц? Потому что то что Вы хотите (если я правильно понял) делается как select sct_id, top_id, count(*) cnt from t1 group by sct_id, top_id Но наверное задача несколько сложнее ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2001, 14:11 |
|
Можно ли развернуть данные из 2 стлб. табл. как массив MxN?
|
|||
---|---|---|---|
#18+
СПАСИБО ЗА CROSS-TAB QUERY! Я еще не знал про такую возможность! А задачу свою по удалению записей из t1, где в связанных с ней записях в t2 одинаковый набор значений полей я все-таки решил! -----=====***** УДАЛЕНИЕ ПОВТОРЯЮЩИХСЯ ПЕРЕСЕЧЕНИЙ ТВР *****=====------ -- СОЗДАНИЕ КУРСОРА DECLARE c_sct CURSOR GLOBAL SCROLL KEYSET FOR select distinct sct_id from intrsct -- ОТКРЫТИЕ КУРСОРА OPEN c_sct -- РАБОТА С КУРСОРОМ if @@cursor_rows > 1 BEGIN -- определение переменных -- declare @i1 int declare @i2 int declare @cnt int declare @r1 int declare @r2 int declare @sct1 int declare @sct2 int declare @t_cnt1 int declare @t_cnt2 int set @cnt = @@cursor_rows set @r1 = 1 set @r2 = 2 -- процесс -- print '@cnt= '+convert(char(3),@cnt) print '---------' while (@r1<@cnt) BEGIN print '@r1 = '+convert(char(3),@r1) while (@r2<=@cnt) BEGIN fetch absolute @r1 from c_sct into @sct1 fetch absolute @r2 from c_sct into @sct2 set @t_cnt1 = (select count(distinct top_id) from intrsct_top where sct_id=@sct1) set @t_cnt2 = (select count(distinct top_id) from intrsct_top where sct_id=@sct2) if (@t_cnt1=@t_cnt2) and ((select count(distinct top_id) from intrsct_top where sct_id in (@sct1, @sct2)) = @t_cnt1) begin -- удаление дублирующихся записей-- print '@r1 = '+convert(char(3),@r1)+' |@r2 = '+convert(char(3),@r2)+' deleted !' delete from intrsct where sct_id = @sct2 delete from intrsct_top where sct_id = @sct2 end -- else SET @r2 = @r2+1 END SET @r1 = @r1+1 SET @r2 = @r1+1 END END--if -- ЗАКРЫТИЕ КУРСОРА CLOSE c_sct -- УДАЛЕНИЕ КУРСОРА DEALLOCATE c_sct ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2001, 17:20 |
|
|
start [/forum/topic.php?fid=46&msg=32002645&tid=1827280]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 270ms |
total: | 393ms |
0 / 0 |