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

Вниз

SQL-запрос на выборку данных из разных таблиц   Найти похожие ветки 

 
Karlson   (2004-01-26 19:37) [0]

Здравствуйте! Такая ситуация: есть Таблица 1, Таблица 2, Таблица 3, таблицы 1 и 2 связаны по полю место, таблицы 1 и 3 - отдел. Необходимо выбрать следующую информацию и в таком виде из этих таблиц:
место отдел 1 отдел 2 ... отдел н
место 1 количество ... количество
место 2
...
место н
где количество - это количество записей в таблице 1 с номером соответствующего отдела и места
Помогите, пожалуйста.
Такой запрос дублирует записи из таблицы 2:
select c.name as typ, b.rvdk_name, count (a.id) as coun from osnovni a, treasuries b, types c
where (a.treasury = b.id)and(a.types = c.id)
group by b.rvdk_name, c.name


 
ЮЮ   (2004-01-27 03:27) [1]

Странно, в запросе выбираем три поля, в том что надо - N + 1
В запросе osnovni treasuries types, в вопросе Таблица 1, Таблица 2, Таблица 3
Далее, таблицы 1 и 2 связаны по полю место, таблицы 1 и 3 - отдел. А тип связи? Если 1 и 2 связаны как 1:N, а 1 и 3 как 1:N, то запрос правильный, если же связи M:N, то количество записей из Т2 будет умножаться на количество записей в T3.

Короче, информации мало для правильного ответа.

Включаем, как всегда, чтение мыслей на расстоянии :-)

Учитывая, что ты все-таки подсчет ведешь в osnovni, выполни сначала
SELECT treasury, type, COUNT(id) cnt from osnovni GROUP BY treasury, type
Здесь, надеюсь, итоги правильные.
А теперь подклячи treasuries и types (надеюсь, все-таки, что отношение 1:N)

SELECT treasuries.rvdk_name, types.name, cnt
FROM
(
SELECT treasury, type, COUNT(id) cnt
FROM osnovni
GROUP BY treasury, type
) Gr
LEFT JOIN treasuries ON Gr.treasury = treasuries.ID
LEFT JOIN types ON Gr.type = types.ID

И вообще, если "дублирует записи из таблицы 2" значит из таблицы 3 присоединяется 2 записи, а не 1. Убери из запроса group by и поставь select * и убери Count, убедись в правильности полученных записей, а лишь затем включай группировку


 
Karlson   (2004-01-27 09:48) [2]

Пасиба!
Отношение действительно 1:N и том и другом случае.
Все класнно работает, но! В первом столбце выдает инфу из таблицы treasuries, во втором из types, в третьем количество. Второй и третий столбцы - все как нужно, а вот первый - там записи повторяются при разных данных второго столбца, как решить эту проблему?


 
Karlson   (2004-01-27 16:24) [3]

Народ, хелпаните! плиз


 
HSolo   (2004-01-27 17:09) [4]

Структура таблиц? Как должен выглядеть желаемый результат?


 
Karlson   (2004-01-27 17:56) [5]

Выше же все описано...


 
HSolo   (2004-01-27 18:13) [6]

Ну если действительно все, то Вам ответили правильно


 
ЮЮ   (2004-01-28 03:22) [7]

Ну а разложить в шахматку - это уже или на клиенте, или в XП, т.к. просто запросом "прямоугольник" не получишь

Или динамически формировать запрос, т.к. количество столбцов непостоянно и заранее не известго. Вот примеры из BOL:

SELECT Year,
SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,
SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,
SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,
SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4
FROM Northwind.dbo.Pivot
GROUP BY Year

Или

SELECT P1.*, (P1.Q1 + P1.Q2 + P1.Q3 + P1.Q4) AS YearTotal
FROM (SELECT Year,
SUM(CASE P.Quarter WHEN 1 THEN P.Amount ELSE 0 END) AS Q1,
SUM(CASE P.Quarter WHEN 2 THEN P.Amount ELSE 0 END) AS Q2,
SUM(CASE P.Quarter WHEN 3 THEN P.Amount ELSE 0 END) AS Q3,
SUM(CASE P.Quarter WHEN 4 THEN P.Amount ELSE 0 END) AS Q4
FROM Pivot AS P
GROUP BY P.Year) AS P1



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

Форум: "Базы";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
1-53544
denis24
2004-02-05 12:33
2004.02.17
Размщение контролов на форме при разном разрешении экрана


1-53471
Creator
2004-02-06 13:37
2004.02.17
Как зделать процес System ???


1-53470
Creator
2004-02-05 10:07
2004.02.17
приложение System


4-53825
deema
2003-12-14 18:59
2004.02.17
Clipboard format


14-53743
syte_ser78
2004-01-28 08:58
2004.02.17
Коаксиал и витая пара





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский