Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
palladin600 Member Откуда: Minsk Power Station Сообщений: 514 |
Тысячу извинений, есть запрос один, и у него одно поле генерится путём подзапроса:SELECT ..., (select rel.information from products AS p2 INNER JOIN relations as rel ON p2.ID = rel.PID where p1.ID = p2.ID and rel.[SID]=2) as information, ... FROM ... теперь вот ещё одно поле понадобилось из той же таблицы relations, его также надо оформлять в виде нового подзапроса? (select rel.additions from products AS p2 INNER JOIN relations as rel ON p2.ID = rel.PID where p1.ID = p2.ID and rel.[SID]=2) as addition, Или можно каким-то образом соединить с существующим? ну т.е. чтобы подзапрос возвращал 2 поля: rel.information, rel.additions |
13 фев 17, 20:00 [20208999] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
outer apply |
13 фев 17, 20:02 [20209002] Ответить | Цитировать Сообщить модератору |
palladin600 Member Откуда: Minsk Power Station Сообщений: 514 |
по чуйке вписал outer apply в запрос... вот весь запрос:SELECT p1.ID, v.[Name], pg.[Name], ts.[Transport], p1.Visible AS empty, p1.Quantity, p1.LastUpdate, (select cast(rel.[SID] as varchar(3)) + '(' + convert(varchar(6), convert(int, ISNULL(rel.[SVALUE], 0))) + '/' + cast(ISNULL(rel.[SCOUNT],0) as varchar(4)) + ');' as 'data()' FROM Products AS p2 INNER JOIN relations as rel ON p2.ID = rel.PID WHERE p1.id = p2.id order by rel.[SID] for xml path('')) as suppliers, tbl.information, tbl.additions, --ЭТО ДОБАВИЛ pg.Prestige FROM Products AS p1 INNER JOIN Models AS pg ON p1.ModelID = pg.ID INNER JOIN Vendors AS v ON pg.VendorID = v.ID LEFT JOIN relations AS rel ON p1.ID = rel.PID INNER JOIN Typesizes AS ts ON p1.ID = ts.ID OUTER APPLY (select rel.[PID], rel.[information], rel.[additions] --ЭТОТ БЛОК ДОБАВИЛ from products AS p2 INNER JOIN relations as rel ON p2.ID = rel.PID where p1.ID = p2.ID and rel.[SID]=2) tbl LEFT JOIN Products p3 ON p3.ID = tbl.PID --ЭТО ДОБАВИЛ WHERE rel.[sID] = 2 OR p1.ID IN (11586,5320,50067,13735,50140) GROUP BY ts.[Transport], p1.ID, p1.Visible, p1.LastUpdate, p1.Quantity, v.[Name], pg.[Name], pg.Prestige, pg.CategoryID, tbl.information, tbl.additions ORDER BY 2, 3, 4 А принципе, запрос вроде всё верно отдаёт, но меня беспокоит что я таблицу Products дважды присоединил (p3). И ещё relations может один раз в OUTER APPLY достаточно? Взгляните краем глаза пожалуйста, чтобы красиво всё вышло: что лучше исправить с глаз долой? |
13 фев 17, 21:07 [20209130] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
Вот так, примерно, должно быть: SELECT p1.ID, v.[Name], pg.[Name], ts.[Transport], p1.Visible AS empty, p1.Quantity, p1.LastUpdate, (select cast(r.[SID] as varchar(3)) + '(' + convert(varchar(6), convert(int, ISNULL(r.[SVALUE], 0))) + '/' + cast(ISNULL(r.[SCOUNT],0) as varchar(4)) + ');' as 'data()' FROM relations as r WHERE r.PID = p1.ID order by r.[SID] for xml path('')) as suppliers, rel.information, rel.additions, pg.Prestige FROM Products AS p1 INNER JOIN Models AS pg ON p1.ModelID = pg.ID INNER JOIN Vendors AS v ON pg.VendorID = v.ID LEFT JOIN relations AS rel ON p1.ID = rel.PID and rel.[SID] = 2 INNER JOIN Typesizes AS ts ON p1.ID = ts.ID WHERE p1.ID IN (11586,5320,50067,13735,50140) GROUP BY ts.[Transport], p1.ID, p1.Visible, p1.LastUpdate, p1.Quantity, v.[Name], pg.[Name], pg.Prestige, pg.CategoryID, rel.information, rel.additions ORDER BY 2, 3, 4 |
||
13 фев 17, 23:36 [20209451] Ответить | Цитировать Сообщить модератору |
palladin600 Member Откуда: Minsk Power Station Сообщений: 514 |
invm, ГранМерси сударь! поправил, заработало, :) только выдало ограниченную серию результатов... пришлось вернуть условие WHERE на WHERE rel.[sID] = 2 OR p1.ID IN (11586,5320,50067,13735,50140) если rel.[sID] не указывать возвращает только пять записей... |
13 фев 17, 23:49 [20209468] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |