Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2010.08.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
Александр ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.003 c
2-1275885990
И. Павел
2010-06-07 08:46
2010.08.29
WM_COMMAND выполняется, но результат <> 0


2-1275905953
stas
2010-06-07 14:19
2010.08.29
Гарантированно убить Thread


2-1275807557
akosh12345
2010-06-06 10:59
2010.08.29
Прорисовка в ListView


2-1275750948
HRustBB
2010-06-05 19:15
2010.08.29
Как рисовать на TPanel


2-1275900385
12
2010-06-07 12:46
2010.08.29
AV при Close у TForm





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский