Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите как написать запрос !!! [D7, XP]


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо