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

Откуда:
Сообщений: 53
Продолжаю изучать SQL в MS Express SQL Server 2008 на базе из онлайновой игры EVE.
Что я пытаюсь сделать:
есть таблица неких элеметов: invTypes
эти элементы могут состоять издругих элеметов (этой же таблицы), что определяется двумя другими таблицами: typeActivityMaterials (requiredTypeID ,quantity тип состовляющего элемента и количество) и invBlueprintTypes (некий прототип, typeID которого, будет использоваться вместо invTypes.typeID, если напрямую не получилось ), причём одни элементы можно разложить только по первой, другие - только по прототипу. ну а часть или обеими способами или - никак.
Уровней вложеннсти может быть и три, возможно даже 4, но подозреваю, что общее решение очень сложное. поэтому мне достаточно всего одного уровня.
Вот как я это сделал:
SELECT typ.typeID
      
      ,[typeName]
      ,mat.requiredTypeID
      ,mat.quantity
      ,mat.typeID
      ,post.requiredTypeID
      ,post.quantity
      ,coalesce(post.requiredTypeID, mat.requiredTypeID ) as element
      ,coalesce(post.quantity * mat.quantity, mat.quantity ) as col_vo
      
      
  FROM [EVE].[dbo].[invTypes] typ
  
  left outer join [EVE].[dbo].[invBlueprintTypes] blu on productTypeID=typ.typeID 
  left outer join [EVE].[dbo].[typeActivityMaterials] mat on mat.typeID = coalesce(blu.blueprintTypeID,  typ.typeID)
  left outer join [EVE].[dbo].[invBlueprintTypes] blupost on  blupost.productTypeID=mat.requiredTypeID
  left outer join [EVE].[dbo].[typeActivityMaterials] post on post.typeID = coalesce(blupost.blueprintTypeID,mat.requiredTypeID)
  where typ.typeID = 21019
  or typ.typeID = 11341
  or typ.typeID = 28606

Почему-то мне кажется, что это можно было записать намного проще или не выносить отдельно последние два столбца, а как-то подменить данные в первом уровне вложенности. Посмотрите опытным взглядом - тем ли путём я шёл?
21 ноя 09, 12:43    [7959646]     Ответить | Цитировать Сообщить модератору
 Re: Раскрутить одинарную вложенность.  [new]
Валдай
Member

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

автор
Уровней вложеннсти может быть и три, возможно даже 4


Если у вас иерархическая структура, то смотрите в сторону CTE c рекурсией.
msdn CTE
разберите пример F
22 ноя 09, 12:28    [7960838]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить