Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для SpiritAbsolute
5 / 5 / 1
Регистрация: 07.08.2013
Сообщений: 75

Выборка с базы

10.09.2013, 15:52. Показов 700. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем! Нужно сделать выборку с базы вида: [нас. пункт, улица, дом],[Участок],[Услуга],[Ед измерения],[Тариф],[Норматив],[Поставщик],[Количество лицевых счетов]

входные параметры: id населенного пункта, id улицы, id дома, id услуги.

Я разобрался во всех связях между таблицами, и все соединил , получилось вот так.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT DISTINCT stt.Name +' '+ s.Name +' '+ hs.Number AS 'Адрес', d.name AS 'Участок', rs.Name AS 'Услуга', mu.Name AS 'Ед.Измерения', ast.cost AS 'Тариф', sf.Specific AS 'Норматив', sup.Name AS 'Поставщик', COUNT(DISTINCT r.id) AS 'Количество ЛС'
FROM cpay.reciever r
    JOIN cpay.access ass ON r.id = ass.[owner]
        LEFT JOIN Auxiliary.TariffesTypes att ON ass.ID_TariffesTypes = att.ID_ServiceSubtypes
                LEFT JOIN [REFERENCES].Suppliers sup ON att.ID_Suppliers = sup.ID
        LEFT JOIN Auxiliary.ServiceTariffes ast ON att.ID = ast.ID_TariffesTypes
          JOIN [REFERENCES].[Services] rs ON ass.ID_Service = rs.ID
             JOIN Auxiliary.ServiceSubtypes asbt ON rs.ID = asbt.ID_Service
                JOIN [REFERENCES].Specifications sf ON asbt.id = sf.ID_Subtype
             JOIN [REFERENCES].[MeasureUnits] mu ON rs.ID_MeasureUnits = mu.id
    LEFT JOIN [REFERENCES].[Districts] d ON r.id_district = d.ID
    JOIN Common.Flats f ON r.ID_Flat = f.ID
    JOIN Common.Entrances e ON f.[OWNER] = e.ID 
    JOIN Common.Houses hs ON e.[OWNER] = hs.ID
    JOIN Common.Buildings b ON hs.[OWNER] = b.ID
    JOIN Common.Streets s ON b.[OWNER] = s.ID
    JOIN Common.Settlements stt ON s.[OWNER] = stt.ID
WHERE
      (@SettlementID IS NULL OR stt.ID IN (SELECT id FROM @SettlementID_table)) AND
      (@StreetsID IS NULL OR s.ID IN (SELECT id FROM @StreetsID_table)) AND
      (@HousesID IS NULL OR hs.ID IN (SELECT id FROM @HousesID_table)) AND
      (@ServicesID IS NULL OR rs.ID IN (SELECT id FROM @ServicesID_table))
GROUP BY stt.Name +' '+ s.Name +' '+ hs.Number, d.name, rs.Name, mu.Name, ast.cost, sf.Specific, sup.Name
В условии where этого селекта входные @ID

В результате такого запроса получается 15 строк
http://s2.ipicture.ru/uploads/... 0ZpRyU.jpg вот таких. Это результат по 1 городу, по 1 улице, по 1 дому , по всем услугам. Как мне обработать этот результат правильно, он получается мягко говоря не корректным, потому что строки повторяются, там где их не достает. например в первых двух столбцах должно быть по 1 строке на самом деле, но за счет того что услуг больше, и за счет того что у услуг еще и разные единицы измерения , тарифы и нормативы получается вот такая каша.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2013, 15:52
Ответы с готовыми решениями:

Выборка из базы
Есть таблица: в ней код и имя. Но у одного кода могут быть разные имена: 12345 - name1 12345 - name2 12345 - name3 Мне нужно...

Выборка из базы данных
Есть таблица "A", в ней данные хранятся в двух столбцах, ограничений нет, дубликаты допустимы. Вот пример: Подскажите пожалуйста...

Выборка из базы
Нужна помощь выборке из бд данных за определенный промежуток дат, в формате ...от и до...

3
40 / 40 / 16
Регистрация: 07.08.2012
Сообщений: 187
10.09.2013, 16:51
Вместо Left join поставить Inner join
0
 Аватар для SpiritAbsolute
5 / 5 / 1
Регистрация: 07.08.2013
Сообщений: 75
10.09.2013, 18:56  [ТС]
Если вместо left писать inner, что тоже самое что просто join и можно опустить, то выборки не происходит, результат просто названия столбцов

Добавлено через 1 час 25 минут
в общем не вникайте! косяк в связях, я разобрался стало выводить нормально.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM cpay.reciever r
    JOIN cpay.access ass ON r.id = ass.[owner]
    JOIN [REFERENCES].[Services] rs ON ass.ID_Service = rs.ID
    JOIN [REFERENCES].[MeasureUnits] mu ON rs.ID_MeasureUnits = mu.id
    JOIN Auxiliary.TariffesTypes att ON ass.ID_TariffesTypes = att.ID
    JOIN Auxiliary.ServiceSubtypes assb ON rs.ID = assb.ID_Service
    JOIN Auxiliary.ServiceTariffes ast ON att.ID = ast.ID_TariffesTypes
    JOIN [REFERENCES].[Districts] d ON r.id_district = d.ID
    JOIN Common.Flats f ON r.ID_Flat = f.ID
    JOIN Common.Entrances e ON f.[OWNER] = e.ID
    JOIN Common.Houses hs ON e.[OWNER] = hs.ID
    JOIN Common.Buildings b ON hs.[OWNER] = b.ID
    JOIN Common.Streets s ON b.[OWNER] = s.ID
    JOIN Common.Settlements stt ON s.[OWNER] = stt.ID
0
20 / 20 / 1
Регистрация: 03.01.2013
Сообщений: 184
11.09.2013, 15:47
Но ведь все равно использовал внутреннее соединение)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.09.2013, 15:47
Помогаю со студенческими работами здесь

Выборка из базы
мне необходимо выбрать из базы 1min, таблицы а03 строку b46 , за 2016 год полностью за год сколько было записей который были больше 1000

Выборка из базы
Сильно не углублялся В php работу с базами а видимо стояло. Нужно решить такую задачу У нас есть 25 блоков в которых есть текст из...

Выборка из базы
id='{$user}' and email LIKE '%{$text}%' OR name LIKE '%{$text}%' OR email LIKE '%{$text}%' Что та выбирает все строки, не учнитыва я ...

Выборка из базы
Пишу что-то вроде тестирования для студентов. Студент заходит на главную страницу и указывает свои данные и выбирает указанную тему,...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru