столбцы из разных таблиц вывести в разные столбцы
условно есть таблица 1, в ней есть id , code и name . в таблице 2 есть id , code , name . вопрос вот в чём, как вывести 1.id в один столбец и вывести 2.id во второй столбец? пробовал join правый, левый, внутренний и т.д. подскажите, решение где то рядом, но ускользает от меня. upd: пробовал cross join , но он просто перемножил id из таблиц. left join возвращает id только из таблицы 1. right join возвращает id из таблицы 2, но почему-то пустые строки, но кол-во строк совпадает с кол-вом строк из 2 таблицы.
Отслеживать
задан 22 мар в 4:28
27 3 3 бронзовых знака
А что, таблицы как-то связаны?
22 мар в 4:42
@Oopss, id code name есть повторяющиеся значения, но не все
22 мар в 4:48
@Зонтик важнее было бы пример данных в табличках и ожидаемый результат. Попытки тут ни к чему
22 мар в 5:12
уточните вашу БД и какая связь между таблицами, именно логическую, а не на уровне сервера БД
27 мар в 4:07
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Уточните БД которое вы используете. А вообще задача стандартная, попробуйте следующий запрос: Насколько я понял, code является бизнес ключём, т.е. определяет уникальность записи..
Пусть это будут таблицы Human и Enemy :
SELECT H.Id, E.Id, COALESCE(H.code, E.code) as code, COALESCE(H.name, E.name) as name FROM Human H FULL JOIN Enemy E on H.code = E.code --H.name = E.name -- это условие стоит раскомментировать, --если связка по имени имеет место быть
@Oopss, id code name есть повторяющиеся значения, но не все
Можно добавить дистинкт в первую или вторую или в обе таблички перед соединением.
Получится что-то вроде:
SELECT H.Id, E.Id, COALESCE(H.code, E.code) as code, COALESCE(H.name, E.name) as name FROM (SELECT DISTINCT id, code, name FROM Human) as H FULL JOIN (SELECT DISTINCT id, code, name FROM Enemy) as E on H.code = E.code
Вам нужно определиться и описать в вопросе какая связь между этими таблицами. Я предположил, что поле code .
Как вычитать сумму столбцов из разных таблиц
Есть 2 таблицы, нужно вычесть сумму одной таблицы из суммы другой, если просто вводить table1-table2, то получается не 1 строка а несколько, также пробовал чз SUM, получается в одной строке но неправильно(оно вычитает из каждого значения 1 таблицы, значения 2 таблицы и суммирует их).
INSERT Отчет(Дата, Прибыль) SELECT GETDATE(), Начисление.Сумма-Снятие.Итог FROM Начисление, Снятие;
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Рассчитать сумму столбцов из разных таблиц
Как подсчитать сумму из одного столбца "Начислено"-17000р со 2 столбом "Надбавка"-2500р и чтобы.
Как вычесть значения столбцов из разных таблиц в Access?
Подскажите пожалуйста. Есть таблица выдача и склад,при заполнении таблица выдача столбца товар.
Умножение столбцов из разных таблиц
var sumk: real; begin sumk:=0; tbl1.First; While not tbl1.eof do begin sumk:=sumk+tbl1 *.
Как вычитать из двух таблиц записи Kak vychitat’ iz dvukh tablit
Есть БД Акссес Сделана из а к есть две таблицы состав и корзину без связи между ними. В составе.
1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713
Сообщение от dsadsadas 
SELECT GETDATE(), Начисление.Сумма-Снятие.Итог FROM Начисление, Снятие
Добавлено через 40 секунд
sum и group by не предлагть?
Регистрация: 16.09.2019
Сообщений: 26
GROUP BY не получится тк таблицы разные, я хз если у тя есть варианты как из 2 таблиц group by нормальный сделать то можешь предлагать, про SUM я уже писал.
1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713
чувак, для начала изучи порядок выполнения предложений в запросе. Много вопросов снимутся сами собой
1898 / 1345 / 273
Регистрация: 14.08.2018
Сообщений: 4,449
Записей в блоге: 4
Регистрация: 16.09.2019
Сообщений: 26
1) JOIN — зачем мне их соединять?
2) толку от GROUP By если у меня нет общего идентификатора?
3) SUM — и так пытался использовать.
Добавлено через 56 секунд
pincet, Проблема не в порядке выполнения запросов, проблема в том что с GROUP BY оно считает также как и без него(неправильно, а вот на сколько неправильно, мне в принципе не важно) и насколько я помню он разделил мне их на 2 строки, а мне нужна 1.
1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713
Сообщение от dsadsadas 
FROM Начисление, Снятие;
ты уже соединил, только через одно место. и я говорил про порядок выполнения предложений в запросе, а не запросов
Добавлено через 1 минуту
Сообщение от dsadsadas 
толку от GROUP By если у меня нет общего идентификатора?
тут только страдать, что еще
1898 / 1345 / 273
Регистрация: 14.08.2018
Сообщений: 4,449
Записей в блоге: 4
Сообщение от dsadsadas 
Начисление.Сумма-Снятие.Итог FROM Начисление, Снятие;
А что тут происходит без ключа? Просто одно вычитается из другого? Да и FROM через одно место написан.
Потому JOIN и ключи для связи, и после этого FROM . JOIN . GROUP BY будет единой сущностью для INSERT . SELECT . SUM() .
Книжки по SQL и базам данных почитай, вопросы отпадут сами собой.
Регистрация: 16.09.2019
Сообщений: 26
Крч я уже сам справился, мне пофиг на ваше мнение, вот ответ:
SELECT (SELECT SUM(Начисление.Сумма) s1 FROM Начисление) - (SELECT SUM(Снятие.Итог) s2 FROM Снятие)
что это за предметная область или что за логика в базе?
если вычесть сумму прихода и расхода, по получится средняя температура по больнице
| Меню пользователя @ qwertehok |
| Читать блог |
1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713
dsadsadas,
страдай, что еще сказать
Добавлено через 4 минуты
qwertehok,
да овно реализация предметной области. чем сделать ОДИН флаг для движения нужно колхозить 2 табы. Еще и покаким-то причинам нужно в отчет инсертить всю эту непотребщину
Регистрация: 16.09.2019
Сообщений: 26
Вы б предложили что то, вместо того оскорблять меня в криворукости, а так вы просто пытаетесь оскорбить меня а не решить задачу, так что сам страдай, бесполезность.
1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713
Сообщение от dsadsadas 
мне пофиг на ваше мнение, вот ответ:
это кто кого оскорбляет, любезный?
Регистрация: 16.09.2019
Сообщений: 26
Если б вы не начали со мной общаться с таким отношением, я бы ответил также нормально, но тк вы начали, заниматься спамом и оскорблениями, вместо помощи, такое отношение и получили.
1898 / 1345 / 273
Регистрация: 14.08.2018
Сообщений: 4,449
Записей в блоге: 4
1634 / 1135 / 171
Регистрация: 23.07.2010
Сообщений: 6,713
Сообщение от Andrey-MSK 
наше светлое будущее
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Разница двух столбцов разных таблиц
Помогите пожалуйста Есть две таблицы, которые подключаются через ADO, отражаются в DBGrid1 и 2.
Сложение двух столбцов из разных таблиц
Есть таблица Отели(Id, Название, Тип, Класс, Цена, Тип питания) и есть таблица Питание(Id,Питание.
Объединение двух столбцов разных таблиц
Даны две тыблицы нужно обьединить два столбца в один: SELECT t.name, t_t.name FROM t, t_t WHERE.

Как сложить или вычесть значения из разных таблиц в Access 2010? А конкретно значения столбцов
Как сложить или вычесть значения из разных таблиц в Access 2010? А конкретно значения столбцов Ну.

Создание проверки на совпадение 2 столбцов разных таблиц (непростая)
Подскажите, пожалуйста! Есть в файле эксель три листа, на 1 листе производится итог на 2 и 3.
Сбор в один столбец запроса данных из столбцов 2-х разных таблиц.
Добрый день. Сразу оговорюсь — изменить базу данных не вариант, так как она уже есть и заполнена.
Соединение таблиц
Нередко возникает необходимость в одном запросе получить данные сразу из нескольких таблиц. Для сведения данных из разных таблиц мы можем использовать разные способы. В данной статье рассмотрим не самый распространный, однако довольно простой способ, который представляет неявное соединение таблиц.
Допустим, у нас есть следующие таблицы, которые связаны между собой связями:
CREATE TABLE Products ( Id INT AUTO_INCREMENT PRIMARY KEY, ProductName VARCHAR(30) NOT NULL, Manufacturer VARCHAR(20) NOT NULL, ProductCount INT DEFAULT 0, Price DECIMAL NOT NULL ); CREATE TABLE Customers ( Id INT AUTO_INCREMENT PRIMARY KEY, FirstName VARCHAR(30) NOT NULL ); CREATE TABLE Orders ( Id INT AUTO_INCREMENT PRIMARY KEY, ProductId INT NOT NULL, CustomerId INT NOT NULL, CreatedAt DATE NOT NULL, ProductCount INT DEFAULT 1, Price DECIMAL NOT NULL, FOREIGN KEY (ProductId) REFERENCES Products(Id) ON DELETE CASCADE, FOREIGN KEY (CustomerId) REFERENCES Customers(Id) ON DELETE CASCADE );
Здесь таблицы Products и Customers связаны с таблицей Orders связью один ко многим. Таблица Orders в виде внешних ключей ProductId и CustomerId содержит ссылки на столбцы Id из соответственно таблиц Products и Customers. Также она хранит количество купленного товара (ProductCount) и и по какой цене он был куплен (Price). И кроме того, таблицы также хранит в виде столбца CreatedAt дату покупки.
Пусть эти таблицы будут содержать следующие данные:
INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price) VALUES ('iPhone X', 'Apple', 2, 76000), ('iPhone 8', 'Apple', 2, 51000), ('iPhone 7', 'Apple', 5, 42000), ('Galaxy S9', 'Samsung', 2, 56000), ('Galaxy S8', 'Samsung', 1, 46000), ('Honor 10', 'Huawei', 2, 26000), ('Nokia 8', 'HMD Global', 6, 38000); INSERT INTO Customers(FirstName) VALUES ('Tom'), ('Bob'),('Sam'); INSERT INTO Orders (ProductId, CustomerId, CreatedAt, ProductCount, Price) VALUES ( (SELECT Id FROM Products WHERE ProductName='Galaxy S8'), (SELECT Id FROM Customers WHERE FirstName='Tom'), '2018-05-21', 2, (SELECT Price FROM Products WHERE ProductName='Galaxy S8') ), ( (SELECT Id FROM Products WHERE ProductName='iPhone X'), (SELECT Id FROM Customers WHERE FirstName='Tom'), '2018-05-23', 1, (SELECT Price FROM Products WHERE ProductName='iPhone X') ), ( (SELECT Id FROM Products WHERE ProductName='iPhone X'), (SELECT Id FROM Customers WHERE FirstName='Bob'), '2018-05-21', 1, (SELECT Price FROM Products WHERE ProductName='iPhone X') );
Теперь соединим две таблицы Orders и Customers:
SELECT * FROM Orders, Customers;
При такой выборке каждая строка из таблицы Orders будет соединяться с каждой строкой из таблицы Customers. То есть, получится перекрестное соединение. Например, в Orders три строки, а в Customers то же три строки, значит мы получим 3 * 3 = 9 строк:

Но вряд ли это тот результат, который хотелось бы видеть. Тем более каждый заказ из Orders связан с конкретным покупателем из Customers, а не со всеми возможными покупателями.
Чтобы решить задачу, необходимо использовать выражение WHERE и фильтровать строки при условии, что поле CustomerId из Orders соответствует полю Id из Customers:
SELECT * FROM Orders, Customers WHERE Orders.CustomerId = Customers.Id;

Теперь объединим данные по трем таблицам Orders, Customers и Proucts. То есть получим все заказы и добавим информацию по клиенту и связанному товару:
SELECT Customers.FirstName, Products.ProductName, Orders.CreatedAt FROM Orders, Customers, Products WHERE Orders.CustomerId = Customers.Id AND Orders.ProductId=Products.Id;
Так как здесь нужно соединить три таблицы, то применяются как минимум два условия. Ключевой таблицей остается Orders, из которой извлекаются все заказы, а затем к ней подсоединяется данные по клиенту по условию Orders.CustomerId = Customers.Id и данные по товару по условию Orders.ProductId=Products.Id

В данном случае названия таблиц сильно увеличивают код, но мы его можем сократить за счет использования псевдонимов таблиц:
SELECT C.FirstName, P.ProductName, O.CreatedAt FROM Orders AS O, Customers AS C, Products AS P WHERE O.CustomerId = C.Id AND O.ProductId=P.Id;
Если необходимо при использовании псевдонима выбрать все столбцы из определенной таблицы, то можно использовать звездочку:
SELECT C.FirstName, P.ProductName, O.* FROM Orders AS O, Customers AS C, Products AS P WHERE O.CustomerId = C.Id AND O.ProductId=P.Id;
Как можно суммировать столбцы из 2 таблиц и вывести в сводной?
Есть таблица PRIC
и таблица
AMO 
Как написать запрос, который из таблиц PRIC и AMO выводит следующую информацию:
Имя сотрудника; Общая выплаченная сумма (сумма из первой таблицы и второй)
Но если по одному из сотрудников не было выплат, то в поле с общей выплаченной суммой нужно указывать 0.
- Вопрос задан более трёх лет назад
- 334 просмотра
2 комментария
Простой 2 комментария
Silverius16 @Silverius16 Автор вопроса
Просто расчёт зарплат велся в разных таблицах и появилась задача рассчитать общее количество выплат за все время)

Silverius16, В первой таблице записи без дат, во второй с датами. ? Требуется общая сумма по сотруднику, за все время — т.е. все суммы сотрудника просто суммируются или группировка по датам, тогда каждой величине за определенную дату прибавляется величина из таблицы без даты?
Решения вопроса 1

SELECT a.name sum(a.zarp) FROM (SELECT name, IFNULL(zarp, 0) zarp FROM PRIC union all SELECT name, IFNULL(amount, 0) zarp FROM AMO ) A GROUP BY a.name
Ответ написан более трёх лет назад

в данном запросе в IFNULL нет никакого смысла.
запись либо есть, либо нет, нет записей с NULL выплатой.

Сергей, откуда такая уверенность что нет записей с NULL выплатой?
В вопросе есть такая строка:
Но если по одному из сотрудников не было выплат, то в поле с общей выплаченной суммой нужно указывать 0.
Из чего можно сделать вывод что в таблице могут быть сотрудники у которых не было выплат, и у них выплаченная сумма может быть 0 или null (автором вопроса это не уточняется).

idShura, это не уверенность, а предположение. потому что если по нормальному — нет выплаты — нет записи.
к тому же оно так и есть смотрите 2007-03-30, нет Маши.
хотя у каждого свое — «нормально».
вопрос конечно с плохими входными данными.
и автор не отвечает на дополнительные вопросы.
Silverius16 @Silverius16 Автор вопроса
Сергей, В таблице есть ячейки с пустыми значениями. Это нужно для того чтобы эти сотрудники тоже отображались в сводной таблице.
