Я не думаю, что вы можете сделать это в представлении, но вы можете создать определяемую пользователем функцию с табличным значением (функцию, которая возвращает таблицу), чтобы получить то, что вы хотите.
В этом примере используется таблица, определенная как
CREATE TABLE GeoTable (GeomKey int, vector GEOMETRY)
который хранит различные типы геометрии (в приведенном ниже примере я использовал POINT, MULTIPOINT, LINESTRING и POLYGON).
CREATE FUNCTION dbo.GetVertices()
RETURNS @ret TABLE (GeomKey INT, X INT, Y INT, PointNo INT)
AS
BEGIN
DECLARE @max INT
SET @max = (SELECT MAX(vector.STNumPoints()) FROM GeoTable)
;WITH Sequence(Number) AS
(
SELECT 1 AS Number
UNION ALL
SELECT Number + 1
FROM Sequence
WHERE Number < @max
)
INSERT INTO @ret
SELECT
gt.GeomKey
,gt.vector.STPointN(nums.number).STX AS X
,gt.vector.STPointN(nums.number).STY AS Y
,nums.number AS PointNo
FROM GeoTable gt, Sequence nums
WHERE nums.number <= gt.vector.STNumPoints()
RETURN
END;
Полный рабочий пример см. в этом примере скрипта SQL.
person
jpw
schedule
06.09.2014