Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.29;
Скачать: CL | DM;

Вниз

Объединение таблиц   Найти похожие ветки 

 
Александр ©   (2009-06-02 12:32) [0]

Уважаемые Мастера! Имеются две таблицы в БД. В первой храняться данные в виде кодов, вторая - кодификатор (соответствие кодов строкам).
Запрос:

Select kod, count(*) from tabl
group by kod

прекрасно выплняется. Я получаю сколько раз тот или иной код встречался в таблице БД. Теперь я хочу, чтобы вместо кодов выводилась их расшифровка из другой таблицы

select (select text from kodif where kodif.kod=tabl.kod), count(*) from tabl
group by kod

а вот это не работает, хотя подобный запрос в БД Oracle проходит на ура. Подскажите можно ли в IB реализовать этот запрос.


 
turbouser ©   (2009-06-02 12:50) [1]

group by 1


 
Вариант   (2009-06-02 13:04) [2]

Предлагаю такой вариант:
Исходя из того, что  и строковые значения в справочнике скорее  всего уникальны
заменим group by kod
на group by text и сделаем обычное левое объединение

SELECT k.text,count(*)  FROM tabl as t
left join
kodif as k on k.kod=t.kod
group by k.text


 
Александр ©   (2009-06-02 13:11) [3]

Не проходит. Сообщение: Token unknown 1


 
turbouser ©   (2009-06-02 13:17) [4]


> Александр ©   (02.06.09 13:11) [3]

Вообще-то принято указывать версию субд


 
Игорь Шевченко ©   (2009-06-02 13:20) [5]

select count(*),b.name from code_table a, name_table b where a.code = b.code
group by b.name

?


 
Александр ©   (2009-06-02 13:26) [6]

SELECT k.text,count(*)  FROM tabl as t
left join
kodif as k on k.kod=t.kod
group by k.text

А вот это работает. Спасибо.


 
Sergey13 ©   (2009-06-02 13:32) [7]

> [2] Вариант   (02.06.09 13:04)
> Исходя из того, что  и строковые значения в справочнике
> скорее  всего уникальны

ИМХО это слишком смелое предположение. Сам пару раз натыкался на этот "глюк".
С тех пор предпочитаю все таки включать и код и наименование в группировку.

select a.code,b.name,count(*)
from code_table a, name_table b
where a.code = b.code
group by a.code,b.name


 
Александр ©   (2009-06-02 13:46) [8]

select a.code,b.name,count(*)
from code_table a, name_table b
where a.code = b.code
group by a.code,b.name

Это тоже работает. Только немного изменилась сортировка


 
Sergey13 ©   (2009-06-02 13:53) [9]

> [8] Александр ©   (02.06.09 13:46)
> Только немного изменилась сортировка

Я бы удивился если бы этого не произошло. 8-)
Это означало бы, что твои коды совпадают с наименованием по значению для сортировки.
Отсортируй явно как хочется.


 
Александр ©   (2009-06-02 13:56) [10]

select count(*),b.name from code_table a, name_table b where a.code = b.code
group by b.name

И это хорошо. Спасибо.


 
Вариант   (2009-06-02 13:57) [11]


> Sergey13 ©   (02.06.09 13:32) [7]

Согласен, при определенных условиях (неуникальности строкового поля) надо так как в [7]. А при других - достаточно  [5] или [2]. Данных-то о справочнике нет. Потому и высказано было предположение о справочнике и на его основе дан вариант.


 
AndreyV ©   (2009-06-02 14:41) [12]

> [8] Александр ©   (02.06.09 13:46)
> select a.code,b.name,count(*)
> from code_table a, name_table b
> where a.code = b.code
> group by a.code,b.name
>
> Это тоже работает. Только немного изменилась сортировка

group by и не обязан сортировать, и вообще каждый раз может выдать результат в разном порядке.


 
turbouser ©   (2009-06-02 19:43) [13]


> Александр ©   (02.06.09 13:56) [10]


> И это хорошо. Спасибо.

не совсем... лучше все-таки использовать явные join-ы


 
Игорь Шевченко ©   (2009-06-02 21:08) [14]

turbouser ©   (02.06.09 19:43) [13]


> лучше все-таки использовать явные join-ы


Начнем флейм ? Развернем зеленое знамя Пророка ?


 
ANB   (2009-06-03 14:35) [15]


> Начнем флейм ? Развернем зеленое знамя Пророка ?

Да запинаем мы его :)


> хотя подобный запрос в БД Oracle проходит на ура.

Ой чето сомневаюсь я.


 
Игорь Шевченко ©   (2009-06-03 14:49) [16]


> Ой чето сомневаюсь я.


по синтаксису проходит, не сомневайся.

foo@ora11> create table kodif (
 2    kod int,
 3    text char(10)
 4  );

Table created.

foo@ora11>
foo@ora11> create table tabl (
 2    kod int
 3  );

Table created.

foo@ora11> select (select text from kodif where kodif.kod=tabl.kod), count(*) from tabl
 2  group by kod;

no rows selected


 
ANB   (2009-06-03 18:25) [17]


> Игорь Шевченко ©   (03.06.09 14:49) [16]

Вообще то да - вижу сам, что должно проходить.
Но, милин, насколько коряво . . .



Страницы: 1 вся ветка

Текущий архив: 2010.08.29;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.006 c
15-1275925390
Miau
2010-06-07 19:43
2010.08.29
SQL 2000 vs SQL 2008


15-1266842702
KilkennyCat
2010-02-22 15:45
2010.08.29
Административное предложение (McSimmу и всем)


15-1275984221
SP
2010-06-08 12:03
2010.08.29
Подскажите ПО реализующее стабильный VPN-клиент (PPTP)


15-1276069755
SD Software
2010-06-09 11:49
2010.08.29
Цифровая подпись файла


15-1275997158
_REA
2010-06-08 15:39
2010.08.29
Парадокс