![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите как написать запрос !!! [D7, XP]
AlekseyB © (2008-09-18 11:01:00)Вообщем идея такая :
Нужно из одно таблички выбрать нужные данные и положить их в другую табличку.
Есть табличка из которой будем брать данные:
Name Kol ID
111 10 1
222 5 1
111 12 2
Моя табличка такая: (т.е. то что должно получиться)
Name Osn Dop
111 10 12
222 5 1
Вообщем отбор идет по условию, т.е. по полю ID, если ID=1 то значение Kol ложим в Osn, а если ID=2, то в Dop
Name,т.е. у них одинаковое
Заранее спасибо
ЮЮ (2008-09-18 12:46:00) [21]> но смысл впринципе понял, но.... Спасибо !!!
Ну-ну :)
а врзможны двк зваиси такого плана?
Name Kol ID
111 10 1
111 15 1
int64 (2008-09-18 12:35:00) [22]Удобочитаемость инструкции SELECT может быть улучшена с помощью псевдонима таблицы, известного также как корреляционное имя или переменная диапазона. Псевдоним таблицы можно назначить с ключевым словом AS или без него:
· table_name AS table alias
· table_name table_alias
В следующем примере псевдоним c назначается таблице Customer, а псевдоним s - таблице Store.
USE AdventureWorks;
GO
SELECT c.CustomerID, s.Name
FROM Sales.Customer AS c
JOIN Sales.Store AS s
ON c.CustomerID = s.CustomerID
Если для таблицы назначен псевдоним, то во всех явных ссылках на таблицу в инструкциях Transact-SQL необходимо использовать псевдоним, а не имя таблицы. Например, выполнение следующей инструкции SELECT приводит к синтаксической ошибке, потому что в ней используется имя таблицы, для которой назначен псевдоним:
SELECT Sales.Customer.CustomerID, /* Illegal reference to Sales.Customer. */
s.Name
FROM Sales.Customer AS c
JOIN Sales.Store AS s
ON c.CustomerID = s.CustomerID
AlekseyB (2008-09-18 12:19:00) [23]
> int64
Извени конечно, но объясни мне плиз, что такое t0,t1,t2. У меня MS SQL, на нем надо запросик написать, но смысл впринципе понял, но.... Спасибо !!!
int64 (2008-09-18 12:11:00) [24]select distinct t0.Name, t1.Kol as Osn, t2.Kol as Dop
from Tovar t0 left join
Tovar t1 on t0.Name = t1.Name and t1.ID = 1 left join
Tovar t2 on t0.Name = t2.Name and t2.ID = 2
AlekseyB (2008-09-18 12:06:00) [25]
> Тебе надо взять все имена и присоединить: сначала кол, где
> ид = 1, потом кол, где ид = 2. Так?
Да действительно все так !!! Хорошо постараюсь еще раз объяснить. Есть товар, который хранится на складах №1 или №2, а может быть и там там. Т.е. мне нужно построить табличку, Например, товар 111 находится на складе №1 - 10 штук, на складе №2 - 2 штуки
Johnmen (2008-09-18 12:01:00) [26]> AlekseyB (18.09.08 11:01)
А какая СУБД, как всегда, тайна великая есть?
int64 (2008-09-18 12:01:00) [27]Тебе надо взять все имена и присоединить: сначала кол, где ид = 1, потом кол, где ид = 2. Так?
sniknik (2008-09-18 11:55:00) [28]AlekseyB (18.09.08 11:13) [1]
> А как вот 111 объеденить, чтобы получилось :
группировкой по подзапросу в который подставить то что у тебя выдает
если конечно сервер позволяет подзапросы...
и проблема еще в том, что, из того что ты показал
> делаю так :
> ...
> select distinct Name, Kol,Kolfrom Tovar
> Получаю :
ну никак не получить
> Name Osn Dop
> 111 10 0
> 111 0 12
> 222 5 1
откуда нули взялись? повторение поля даст повторение значения а вовсе не 0 (или 1 что для второго имени).
т.е. врешь ты зачем то... показать видимость деятельности, чтобы быстрее готовый код дали?
Труп Васи Доброго © (18.09.08 11:32) [4]
> Ты хочешь получить 111 10 12 как?
легко, например - группировка + два "сум" по одному и тому же полю с условием которое в зависимости от другого поля либо отдает значение либо ноль.
главное чтобы используемый сервер поддерживал синтаксис.
> Нет так быть не может !!!
а как может? того чего ты показываешь тоже не может быть.
AlekseyB (2008-09-18 11:40:00) [29]
> У тебя могут быть такие исходные?
>
> Name Kol ID
>
> 111 10 1
> 111 10 1
> 222 5 1
> 111 12 2
>
> или
>
> Name Kol ID
>
> 111 6 1
> 111 10 1
> 222 5 1
> 111 12 2
Нет так быть не может !!!
Труп Васи Доброго (2008-09-18 11:32:00) [30]Ты сам точно понимаешь чего хочешь?
Ты хочешь получить 111 10 12 как?
Если сложить то select Name, sum(Osn), sum(Dop) FROM Tovar1 GROUP by Name
Поясни, а то мелафон сломался.
Правильный$Вася (2008-09-18 11:29:00) [31]
> 222 5 1
почему у тебя получается так? ведь для ID=2 нет ничего
int64 (2008-09-18 11:28:00) [32]Настораживает "distinct"
У тебя могут быть такие исходные?
Name Kol ID
111 10 1
111 10 1
222 5 1
111 12 2
или
Name Kol ID
111 6 1
111 10 1
222 5 1
111 12 2
AlekseyB (2008-09-18 11:13:00) [33]делаю так :
insert into Tovar1(Name,Osn,Dop)
select distinct Name,Kol,Kol from Tovar
Получаю :
Name Osn Dop
111 10 0
111 0 12
222 5 1
А как вот 111 объеденить, чтобы получилось :
Name Osn Dop
111 10 12