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

Откуда: Москва
Сообщений: 295
Всем ДД!
Имеется таблица:
Название  Единицы Страница Ч1  Ч2  Ч3
--------------------------------------------
КомпанияА кг         1     2   3   1
                     1     3   2   2
                     1     1   4   4
КомпанияБ м3         2     2   3   1
                     2     1   4   3
                     2     3   5   3
, которую надо привести к виду:

Название  Единицы Страница Ч1  Ч2  Ч3
-------------------------------------------
КомпанияА кг         1      2   3   1
КомпанияА кг         1      3   2   2
КомпанияА кг         1      1   4   4
КомпанияБ м3         2      2   3   1
КомпанияБ м3         2      1   4   3
КомпанияБ м3         2      3   5   3
То есть, в пустых полях проставить максимальные значения из этих полей на соответствующих страницах.

SELECT 
(SELECT MAX(Название) FROM Table AS T1 WHERE T1.Страница = T.Страница) AS Название,
(SELECT MAX(Единицы) FROM Table AS T1 WHERE T1.Страница = T.Страница) AS Единицы,
Страница,
Ч1,
Ч2,
Ч3
FROM Table AS T

Поскольку Table - довольно большая таблица на не очень быстром сервере :) , то хочется оптимизировать подзапросы (их в действительности 4, а не 2, и всё жутко тормозит)

Посоветуйте пожалуйста, что можно сделать.

Обратите внимание, что заполненные поля Названия и Единицы находятся в одной строке, т.е. или оба есть, или обоих нет.

И есть ли какое-нить решение, когда в подтаблице нужно взять не одно поле, а несколько (на будущее)?

Скажем, что-нить типа (код ниже неверен):
SELECT 
  Field1,
  (SELECT Field2, Field3 FROM T2),
  Field4
FROM T1

Спасибо большое ответившим!
24 июн 09, 11:51    [7336630]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз: sub-SELECT и несколько полей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36826
Напишите один раз апдейт и будет вам щастье.
24 июн 09, 11:53    [7336646]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз: sub-SELECT и несколько полей  [new]
iljy
Guest
Eugene_p1
Всем ДД!
И есть ли какое-нить решение, когда в подтаблице нужно взять не одно поле, а несколько (на будущее)?

Скажем, что-нить типа (код ниже неверен):
SELECT 
  Field1,
  (SELECT Field2, Field3 FROM T2),
  Field4
FROM T1

Спасибо большое ответившим!


для 2005
select *
from 
(select Field1,Field4 from T1) tt1
  outer apply
(select Field2,Field3 from T2) tt2

примерно так. Для 2000 так не получится, надо делать через join.
24 июн 09, 11:57    [7336672]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз: sub-SELECT и несколько полей  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Как-то так
SELECT 
J.MAX_Название AS Название,
J.MAX_Единицы AS Единицы,
Страница,
Ч1,
Ч2,
Ч3
FROM Table AS T
JOIN (SELECT Страница
            ,MAX(Название) AS MAX_Название
            ,MAX(Единицы)  AS MAX_Единицы
        FROM Table
       GROUP BY Страница) AS J ON J.Страница = T.Страница
ЗЫ не проверял, могут быть ошибки (в т.ч. синтаксические), просто чтоб идею проиллюстрировать
24 июн 09, 11:57    [7336674]     Ответить | Цитировать Сообщить модератору
 Re: Помогите плз: sub-SELECT и несколько полей  [new]
Eugene_p1
Member

Откуда: Москва
Сообщений: 295
Паганель, iljy

Спасибо большое - в точку!

Гавриленко Сергей Алексеевич - к сожалению, апдейт не подходит - это результаты другого запроса, а исходные таблицы для меня рид-онли.
24 июн 09, 14:35    [7337894]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить