Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос в запросе - неверный вывод  [new]
Borodach
Member

Откуда:
Сообщений: 10
Есть запрос вида:
SELECT Move.id_z, Move.id_d, tbl_detail.d1, Sum(Move.q), заявка2.N
                    FROM tbl_detail INNER JOIN Move ON tbl_detail.id_d = Move.id_d INNER JOIN заявка2 ON Move.id_z = заявка2.K
                    GROUP BY Move.id_z, Move.id_d, tbl_detail.d1, заявка2.N
Он прекрасно отрабатывается и выдаёт верные данные.

Как данные этого запроса использовать в других запросах?
Спасибо.
19 май 11, 15:04    [10678727]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Glory
Member

Откуда:
Сообщений: 104751
Borodach

Как данные этого запроса использовать в других запросах?

Продолжать использовать JOIN-ы
19 май 11, 15:05    [10678738]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
with cte
as
(
SELECT Move.id_z, Move.id_d, tbl_detail.d1, Sum(Move.q) SumMove, заявка2.N
                    FROM tbl_detail INNER JOIN Move ON tbl_detail.id_d = Move.id_d INNER JOIN заявка2 ON Move.id_z = заявка2.K
                    GROUP BY Move.id_z, Move.id_d, tbl_detail.d1, заявка2.N
)

select * from cte
19 май 11, 15:06    [10678742]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
сделать из него
1.сделать из пего временую таблицу и патом использовать
2.сделать инлайн вью
3.сделать СТЕ
.......
1024. Просто добавить нужные таблицы в условие джойн
19 май 11, 15:06    [10678744]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Поправил
Maxx
сделать из него
1.сделать из пего временую таблицу и патом использовать
2.сделать инлайн вью производную (derived) таблицу
3.сделать СТЕ
.......
1024. Просто добавить нужные таблицы в условие джойн
Или имелась в виду табличная инлайн-функция?
19 май 11, 15:17    [10678846]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Borodach
Member

Откуда:
Сообщений: 10
Maxx
сделать из него
1.сделать из пего временую таблицу и патом использовать
2.сделать инлайн вью
3.сделать СТЕ
.......
1024. Просто добавить нужные таблицы в условие джойн

А что из них лучше?
У них у всех время жизни только текущий сеанс (за исключением глоб. временных таблиц)?
19 май 11, 15:17    [10678848]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
iap,

вы правы,ето таки именно так называеться как вы написали ..я в терминологии ошибся
19 май 11, 15:19    [10678867]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Borodach,

а вам что надо? не текущий сеанс ?? Или как ?
19 май 11, 15:19    [10678878]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Borodach
А что из них лучше?

лучше для кого/чего?! для вас?
19 май 11, 15:19    [10678881]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Borodach
Member

Откуда:
Сообщений: 10
Maxx,

Я перевожу базу с access на sql server. Подключаюсь к серверу клиентом на C#. Вот в такой ситуации чем лучше пользоваться? Наверное временными таблицами? Есть ли вразумительные примеры?
19 май 11, 15:42    [10679122]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
да чем вы там подключаетесь к БД- ето дело 4е

Как именно вы хоитите использовать результаты вашего запроса то ??? С чем обьединять или что еще делать,от етого будет зависеть что именно целесообразнее использовать будет. Ведь вариантов много и что именно нужно вам известно только вам
19 май 11, 15:48    [10679168]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Borodach
Member

Откуда:
Сообщений: 10
Maxx,

Запрос из первого поста будет использоваться как таблица.
Но временные таблицы ещё не использовал. Есть ли нормальные примеры их создания?
19 май 11, 15:56    [10679256]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
если хотите как таблицу временую то
Абзац про Temporary Tables
19 май 11, 16:04    [10679349]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Borodach
Member

Откуда:
Сообщений: 10
Maxx,

Спасибо!
Пишу так:
CREATE TABLE #MyTempTable5(id_zajav integer, id_det integer, draw1 nvarchar, quent integer, номер nvarchar)
            INSERT INTO #MyTempTable5 SELECT Move.id_zajav, Move.id_det, tbl_detail.draw1, Sum(Move.quent), заявка2.номер
            FROM tbl_detail INNER JOIN Move ON tbl_detail.id_det = Move.id_det INNER JOIN заявка2 ON Move.id_zajav = заявка2.Код
            GROUP BY Move.id_zajav, Move.id_det, tbl_detail.draw1, заявка2.номер
Ругань:
Server: Msg 208, Level 16, State 1, Line 2
Invalid object name 'tbl_detail'.
Server: Msg 208, Level 16, State 1, Line 2
Invalid object name 'Move'.
Server: Msg 208, Level 16, State 1, Line 2
Invalid object name 'заявка2'.
В чём ошибка?
19 май 11, 16:59    [10679925]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Borodach
Maxx,

Спасибо!
Пишу так:
CREATE TABLE #MyTempTable5(id_zajav integer, id_det integer, draw1 nvarchar, quent integer, номер nvarchar)
            INSERT INTO #MyTempTable5 SELECT Move.id_zajav, Move.id_det, tbl_detail.draw1, Sum(Move.quent), заявка2.номер
            FROM tbl_detail INNER JOIN Move ON tbl_detail.id_det = Move.id_det INNER JOIN заявка2 ON Move.id_zajav = заявка2.Код
            GROUP BY Move.id_zajav, Move.id_det, tbl_detail.draw1, заявка2.номер
Ругань:
Server: Msg 208, Level 16, State 1, Line 2
Invalid object name 'tbl_detail'.
Server: Msg 208, Level 16, State 1, Line 2
Invalid object name 'Move'.
Server: Msg 208, Level 16, State 1, Line 2
Invalid object name 'заявка2'.
В чём ошибка?


ну вообщем "хорошим тоном" будет
1. Перед созданием таблицы все таки проверить ее наличие

if object_id('tempdb.dbo.#MyTempTable5', 'U') IS NULL
  drop table dbo.#MyTempTable5
create table #MyTempTable5 (....)
2. нужно указывать размерность полей nvarchar потому как draw1 nvarchar = draw1 nvarchar(1) ,а у вас там явно больше чем 1 сивол
3.Скорее всего у вас в БД к которой вы подключаетесь нет таблиц к которым вы обращаетесть,сменить контект можно просто написав перед скриптом
use Имя_БД (в котрой живут ваши таблицы)
19 май 11, 17:08    [10680002]     Ответить | Цитировать Сообщить модератору
 Re: Запрос в запросе - неверный вывод  [new]
Borodach
Member

Откуда:
Сообщений: 10
Maxx,

Спасибо! Всё получилось.
Тему можно закрывать.
20 май 11, 16:23    [10685750]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить