Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2014, 07:35   #1
qpash
Новичок
Джуниор
 
Регистрация: 02.09.2009
Сообщений: 2
По умолчанию Проблема в выборке из двух таблиц запросом SQL Server 2012

Добрый день, проблема в выборке из двух таблиц запросом SQL Server 2012:
Имеются 2 таблицы: Tabl1 и Tabl2
Tabl1:
Name -----Pole1-----Pole2------Pole3----Pole4
Имя1-------1-------Город1-------1-------1
Имя1-------2-------Город1-------1-------1
Имя1-------3-------Город1-------1-------1
Имя1-------4-------Город1-------1-------1
Имя1-------5-------Город1-------1-------1
Имя2-------1-------Город1-------1-------1
Имя2-------2-------Город1-------1-------1
Имя2-------3-------Город1-------1-------1
Имя2-------4-------Город1-------1-------1
Имя2-------5-------Город1-------1-------1
Имя3-------1-------Город1-------1-------1
Имя3-------2-------Город1-------1-------1
Имя3-------3-------Город5-------1-------1

Tabl2:
Name-----Pole1------Pole2-------Plan-----Fact
Имя1-------1-------Город1-------10-------10
Имя1-------2-------Город1-------10-------10
Имя1-------3-------Город1-------10-------10
Имя1-------4-------Город1-------10-------10
Имя2-------3-------Город1-------10-------10
Имя3-------3-------Город1-------10-------10
Имя3-------4-------Город1-------10-------10
Имя3-------5-------Город5-------10-------10


При запросе:
SELECT Tabl1.Name AS [Name],
SUM(Tabl1.Pole3) AS [Pole3],
SUM(Tabl1.Pole4) AS [Pole4],
SUM( DISTINCT Tabl2.Plan) AS [Plan],
SUM( DISTINCT Tabl2.Fact) AS [Fact]
FROM Tabl1, Tabl2 WHERE
(Tabl1.Name= Tabl2.Name) AND
(Tabl1.Pole1 BETWEEN '2' AND '4') AND
(Tabl2.Pole1 BETWEEN '2' AND '4') AND
(Tabl1.Pole2=’Город1’) AND
(Tabl2.Pole2=’Город1’) AND
GROUP BY Tabl1.Name

На выходе:
Name ------Pole3------ Pole4----- Plan--------Fact
Имя1--------9------------9--------30---------30
Имя2--------3------------3--------10---------10
Имя3--------4------------4--------20---------20

А должно быть по задумке:
Name------Pole3-------Pole4------Plan--------Fact
Имя1--------3------------3--------30---------30
Имя2--------3------------3--------10---------10
Имя3--------2------------2--------20---------20

Проблема в том, что именно Pole3 и Pole4 из Tabl1 суммируются и умножаются на кол-во совпавших записей из Tabl2, а нужны просто суммы столбов из двух таблиц сгруппированных по имени, по определенным критериям.
Подскажите, где ошибся? (Полный запрос приведу, по необходимости)
qpash вне форума Ответить с цитированием
Старый 19.03.2014, 09:54   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

во второй таблице МНОГО (>1) строк соответствующих первой (Name=Имя1) в результирующем наборе (до группировки) будет много строк с ИМЯ1. (=число строк первого * число строк второго)
выведи набор без группировки и суммирования и посмотри

Код:
select t1.name, t1.s3, t1.s4, t2.p, t2.f
from (select tabl1.name, sum(tabl1.pole3) as s4, sum(tabl1.pole4) as s4
      from tabl1 
      where tabl1.pole1 in ('2','3','4') and pole2 ='город1'
      group by name ) as t1, 
    ( select tabl2.name, sum(tabl2.plan) as p, sum(tabl2.fakt) as f 
      from tabl2 
      where pole2='город1'
      group by name ) as t2
where t1.name=t2.name and t1

Код:
select t1.name, t1.s3, t1.s4, t2.p, t2.f
from (select tabl1.name, tabl1.pole2, sum(tabl1.pole3) as s4, sum(tabl1.pole4) as s4
      from tabl1 
      where tabl1.pole1 in ('2','3','4') 
      group by name, pole2 ) as t1, 
    ( select tabl2.name, tabl2.pole2, sum(tabl2.plan) as p, sum(tabl2.fakt) as f 
      from tabl2 
      group by name, pole2 ) as t2
where t1.name=t2.name and t1.pole2=t2.pole2 
  and t1.pole2='ГородX'
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 19.03.2014 в 10:02.
evg_m на форуме Ответить с цитированием
Старый 19.03.2014, 10:04   #3
qpash
Новичок
Джуниор
 
Регистрация: 02.09.2009
Сообщений: 2
По умолчанию

Вопрос решен
qpash вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL Server 2012 ошибка установки. kestugar Софт 2 10.03.2014 20:31
Установка MS SQL Server 2012 Union programmer SQL, базы данных 10 18.05.2013 19:21
Доступ к microsoft sql server 2012 fufel БД в Delphi 2 28.12.2012 16:07
SQL server 2012 error Руслан Садаев Помощь студентам 0 04.12.2012 13:34
Получение данных из двух таблиц SQL Server а S_Yevgeniy БД в Delphi 8 27.12.2009 15:12