PostGIS常用SQL

聚合:

SELECT array_to_string(array_agg(distinct caliber order by caliber asc),'/') as ccc from ys_line

方法:

create or replace function computeJZWAreaForPSH()
returns void as $$

declare
 psh_jz_area NUMERIC;
 psh_zd_area NUMERIC;
 psh_info RECORD;
 jzw_info RECORD;

BEGIN
--遍历排水户
FOR psh_info IN (SELECT gid,geom FROM psh) LOOP
 --建筑面积求和统计临时变量
 psh_jz_area = 0;
 --建筑占地面积求和统计临时变量
 psh_zd_area = 0;
 --遍历建筑物
 FOR jzw_info IN (SELECT fwjzmj,fwjzzdmj,geom FROM jzw) LOOP
  --如果该建筑物面在排水户面内
  IF st_within(jzw_info.geom, psh_info.geom) THEN
   --累加计算
   psh_jz_area = psh_jz_area + jzw_info.fwjzmj;
   psh_zd_area = psh_zd_area + jzw_info.fwjzzdmj;
  ELSE
  END IF;
 END LOOP;
 UPDATE psh SET jzmj = psh_jz_area, jzzdmj = psh_zd_area WHERE gid = psh_info.gid;
END LOOP;
END;

$$ language plpgsql;
CREATE 
	OR REPLACE FUNCTION computeLineLength ( ) 
	RETURNS void AS $$ 
	DECLARE
	ys_len_info RECORD;
	ws_len_info RECORD;
	hs_len_info RECORD;
BEGIN
	--雨水 
	--找到每条管线的起始点坐标集合,并计算长度 
	FOR ys_len_info IN (
SELECT
	t.gid,|/ (
	( t.startx - t.endx ) ^ 2+ ( t.starty - t.endy ) ^ 2+ ( t.startz - t.endz ) ^ 2 
	) as len 
FROM
	(
SELECT
	l.gid,
	l.st_num,
	to_number ( px.x, '999999.99999' ) startx,
	to_number ( px.y, '999999.99999' ) starty,
	( to_number ( px.surfh, '999999.99999' ) - COALESCE ( l.st_depth, 0.0 ) ) startz,
	l.ed_num,
	to_number ( py.x, '999999.99999' ) endx,
	to_number ( py.y, '999999.99999' ) endy,
	( to_number ( py.surfh, '999999.99999' ) - COALESCE ( l.st_depth, 0.0 ) ) endz 
FROM
	ys_line l
	LEFT JOIN ys_point px ON l.st_num = px.mapno
	LEFT JOIN ys_point py ON l.ed_num = py.mapno 
	) AS t ) LOOP
	UPDATE ys_line 
	SET shape_leng = ys_len_info.len 
WHERE
	gid = ys_len_info.gid;
END LOOP;

--污水 
FOR ws_len_info IN (
	SELECT
		t1.gid,|/(
			( t1.startx - t1.endx ) ^ 2+ ( t1.starty - t1.endy ) ^ 2+ ( t1.startz - t1.endz ) ^ 2 
		) as len 
	FROM
		(
		SELECT
			l.gid,
			l.st_num,
			to_number ( px.x, '999999.99999' ) startx,
			to_number ( px.y, '999999.99999' ) starty,
			( to_number ( px.surfh, '999999.99999' ) - COALESCE ( l.st_depth, 0.0 ) ) startz,
			l.ed_num,
			to_number ( py.x, '999999.99999' ) endx,
			to_number ( py.y, '999999.99999' ) endy,
			( to_number ( py.surfh, '999999.99999' ) - COALESCE ( l.st_depth, 0.0 ) ) endz 
		FROM
			ws_line l
			LEFT JOIN ws_point px ON l.st_num = px.mapno
			LEFT JOIN ws_point py ON l.ed_num = py.mapno 
		) AS t1 ) LOOP
		UPDATE ws_line 
		SET shape_leng = ws_len_info.len 
	WHERE
		gid = ws_len_info.gid;
END LOOP;

--合流 
FOR hs_len_info IN (
	SELECT
		gid,|/ ( ( startx - endx ) ^ 2+ ( starty - endy ) ^ 2+ ( startz - endz ) ^ 2 ) as len 
	FROM
		(
		SELECT
			l.gid,
			l.st_num,
			to_number ( px.x, '999999.99999' ) startx,
			to_number ( px.y, '999999.99999' ) starty,
			( to_number ( px.surfh, '999999.99999' ) - COALESCE ( l.st_depth, 0.0 ) ) startz,
			l.ed_num,
			to_number ( py.x, '999999.99999' ) endx,
			to_number ( py.y, '999999.99999' ) endy,
			( to_number ( py.surfh, '999999.99999' ) - COALESCE ( l.st_depth, 0.0 ) ) endz 
		FROM
			hs_line l
			LEFT JOIN hs_point px ON l.st_num = px.mapno
			LEFT JOIN hs_point py ON l.ed_num = py.mapno 
		) as t 
	)
LOOP
		UPDATE hs_line 
		SET shape_leng = hs_len_info.len 
	WHERE
		gid = hs_len_info.gid;
	
END LOOP;
END;
$$ LANGUAGE plpgsql;
-- 传入一段直线文本,获取该直线相交的管线、路中线,获取到道路名称、管线的管径、相交点的埋深、相交点与路中排序间距
-- 例子:输入'LINESTRING(108.88888888 34.8888888,108.888888, 34.888888888)'
-- 返回:[]
drop type AnalysisData;
-- 创建一种新的返回类型
CREATE TYPE AnalysisData AS    
(
		layerType VARCHAR,
		roadName VARCHAR,
		caliber VARCHAR,
		depth NUMERIC,
		roadCenterDistance NUMERIC,
		x NUMERIC,
		y NUMERIC
);

-- 插值算法伪代码
-- let start_end_distance = 可求算;// 起点与终点距离
-- let end_want_distance = 可求算;
-- let L1; // 起点到与零平面相交点的水平距离
-- let L2; // 终点到与零平面相交点的水平距离
-- // 根据三角函数
-- startDepth/L1==endDepth/L2;
-- if(startDepth > endDepth){
--   L1==L2+start_end_distance;
--   // 换算
--   startDepth/(L2+start_end_distance)==endDepth/L2
--   startDepth==endDepth+(endDepth*start_end_distance)/L2
--   L2==(endDepth* start_end_distance)/(startDepth - endDepth)
--   // 再根据三角函数
--   endDepth/L2 == wantDepth/(L2+end_want_distance)
--   wantDepth==endDepth/L2*(L2+end_want_distance)
--   wantDepth==endDepth+(endDepth*end_want_distance)/L2
--   wantDepth==endDepth+(endDepth*end_want_distance)/(endDepth* start_end_distance)*(startDepth - endDepth)
-- } else if(startDepth < endDepth){
--   L1==L2-start_end_distance
--   // 换算
--   startDepth/(L2-start_end_distance)==endDepth/L2
--   startDepth==endDepth-(endDepth*start_end_distance)/L2
--   L2==(endDepth*start_end_distance)/(endDepth-startDepth)
--   // 再根据三角函数
--   endDepth/L2 == wantDepth/(L2-end_want_distance)
--   wantDepth==(endDepth/L2)*(L2-end_want_distance)
--   wantDepth==endDepth-(endDepth*end_want_distance)/L2
--   wantDepth==endDepth-(endDepth*end_want_distance)/(endDepth*start_end_distance)*(endDepth-startDepth)
-- } else {
--   wantDepth == startDepth == endDepth
-- }
DROP FUNCTION crosssectionanalysis(character varying);
CREATE or REPLACE FUNCTION crossSectionAnalysis(linetext character varying)
	RETURNS SETOF AnalysisData AS $$ 
	DECLARE
	ys_record RECORD;
	ws_record RECORD;
	hs_record RECORD;
	lz_record RECORD;
	road_rec geometry;
	rec geometry;
	result AnalysisData % rowtype;
	singleRow AnalysisData;
	end_want_distance NUMERIC;
	start_end_distance NUMERIC;
	startDepth NUMERIC;
	endDepth NUMERIC;

BEGIN

-- 遍历路中
FOR lz_record IN (select geom from xzlz) LOOP
IF (SELECT st_intersects(st_geomfromtext(linetext, '4326'), lz_record.geom)) THEN
	-- 如果相交,拿到该管线id 获取交点
	road_rec = (SELECT st_intersection(st_geomfromtext(linetext, '4326'), lz_record.geom));
	singleRow.layerType = '路中';
	singleRow.roadName = '';
	singleRow.caliber = 0;
	singleRow.depth = 0;
	singleRow.roadCenterDistance = 0;
	singleRow.x = st_x(road_rec);
	singleRow.y = st_y(road_rec);
	return next singleRow;
END IF;
END LOOP;

-- 遍历雨水
FOR ys_record IN (select l.st_depth startDepth,l.ed_depth endDepth,p1.geom startGeom,p2.geom endGeom,l.road_name,l.caliber,l.geom from ys_line l left join ys_point p1 on l.st_num=p1.mapno left join ys_point p2 on l.ed_num=p2.mapno) LOOP
IF (SELECT st_intersects(st_geomfromtext(linetext, '4326'), ys_record.geom)) THEN
	-- 如果相交,拿到该管线id 获取交点
	rec = (SELECT st_intersection(st_geomfromtext(linetext, '4326'), ys_record.geom));
	singleRow.layerType = '雨水';
	singleRow.roadName = ys_record.road_name;
	singleRow.caliber = ys_record.caliber;
	-- 插值运算
	-- wantDepth==endDepth-(endDepth*end_want_distance)/(endDepth*start_end_distance)*(endDepth-startDepth)
	end_want_distance = (SELECT st_distance(st_transform(rec,3857),st_transform(ys_record.endGeom,3857)));
	start_end_distance = (SELECT st_distance(st_transform(ys_record.startGeom,3857),st_transform(ys_record.endGeom,3857)));
-- 	startDepth = to_number(ys_record.startDepth, '999999.99999');
-- 	endDepth = to_number(ys_record.endDepth, '999999.99999');
	startDepth = ys_record.startDepth;
	endDepth = ys_record.endDepth;
	singleRow.depth = endDepth - (endDepth * end_want_distance) / (endDepth * start_end_distance) * (endDepth - startDepth);
	singleRow.roadCenterDistance = (SELECT st_distance(st_transform(ys_record.geom,3857),st_transform(road_rec,3857)));
	singleRow.x = st_x(rec);
	singleRow.y = st_y(rec);
	return next singleRow;
END IF;
END LOOP;

-- 遍历污水
FOR ws_record IN (select l.st_depth startDepth,l.ed_depth endDepth,p1.geom startGeom,p2.geom endGeom,l.road_name,l.caliber,l.geom from ws_line l left join ws_point p1 on l.st_num=p1.mapno left join ws_point p2 on l.ed_num=p2.mapno) LOOP
IF (SELECT st_intersects(st_geomfromtext(linetext, '4326'), ws_record.geom)) THEN
	-- 如果相交,拿到该管线id 获取交点
	rec = (SELECT st_intersection(st_geomfromtext(linetext, '4326'), ws_record.geom));
	singleRow.layerType = '污水';
	singleRow.roadName = ws_record.road_name;
	singleRow.caliber = ws_record.caliber;
	-- 插值运算
	-- wantDepth==endDepth-(endDepth*end_want_distance)/(endDepth*start_end_distance)*(endDepth-startDepth)
	end_want_distance = (SELECT st_distance(st_transform(rec,3857),st_transform(ws_record.endGeom,3857)));
	start_end_distance = (SELECT st_distance(st_transform(ws_record.startGeom,3857),st_transform(ws_record.endGeom,3857)));
-- 	startDepth = to_number(ys_record.startDepth, '999999.99999');
-- 	endDepth = to_number(ys_record.endDepth, '999999.99999');
	startDepth = ws_record.startDepth;
	endDepth = ws_record.endDepth;
	singleRow.depth = endDepth - (endDepth * end_want_distance) / (endDepth * start_end_distance) * (endDepth - startDepth);
	singleRow.roadCenterDistance = (SELECT st_distance(st_transform(ws_record.geom,3857),st_transform(road_rec,3857)));
	singleRow.x = st_x(rec);
	singleRow.y = st_y(rec);
	return next singleRow;
END IF;
END LOOP;

-- 遍历合流水
FOR hs_record IN (select l.st_depth startDepth,l.ed_depth endDepth,p1.geom startGeom,p2.geom endGeom,l.road_name,l.caliber,l.geom from hs_line l left join hs_point p1 on l.st_num=p1.mapno left join hs_point p2 on l.ed_num=p2.mapno) LOOP
IF (SELECT st_intersects(st_geomfromtext(linetext, '4326'), hs_record.geom)) THEN
	-- 如果相交,拿到该管线id 获取交点
	rec = (SELECT st_intersection(st_geomfromtext(linetext, '4326'), hs_record.geom));
	singleRow.layerType = '合流';
	singleRow.roadName = hs_record.road_name;
	singleRow.caliber = hs_record.caliber;
	-- 插值运算
	-- wantDepth==endDepth-(endDepth*end_want_distance)/(endDepth*start_end_distance)*(endDepth-startDepth)
	end_want_distance = (SELECT st_distance(st_transform(rec,3857),st_transform(hs_record.endGeom,3857)));
	start_end_distance = (SELECT st_distance(st_transform(hs_record.startGeom,3857),st_transform(hs_record.endGeom,3857)));
-- 	startDepth = to_number(ys_record.startDepth, '999999.99999');
-- 	endDepth = to_number(ys_record.endDepth, '999999.99999');
	startDepth = hs_record.startDepth;
	endDepth = hs_record.endDepth;
	singleRow.depth = endDepth - (endDepth * end_want_distance) / (endDepth * start_end_distance) * (endDepth - startDepth);
	singleRow.roadCenterDistance = (SELECT st_distance(st_transform(hs_record.geom,3857),st_transform(road_rec,3857)));
	singleRow.x = st_x(rec);
	singleRow.y = st_y(rec);
	return next singleRow;
END IF;
END LOOP;

END;

$$ LANGUAGE plpgsql;


SELECT * FROM crossSectionAnalysis('LINESTRING(108.88888888 34.8888888,108.888888, 34.888888888)');
-- 为雨、污、合增加统计字段,即方便统计使用的字段
create or replace function countCaliber()
returns void as $$

declare
 rec record;
 greatestValue integer;
 leastValue integer;

BEGIN
--添加字段
ALTER TABLE ys_line
ADD COLUMN greatest_caliber NUMERIC;
ALTER TABLE ys_line
ADD COLUMN least_caliber NUMERIC;
--遍历雨水管线管径
For rec in (SELECT gid,caliber from ys_line) loop
	IF position('*' in rec.caliber)>0 THEN
		greatestValue = GREATEST(split_part(rec.caliber, '*', 1), split_part(rec.caliber, '*', 2));
		leastValue = LEAST(split_part(rec.caliber, '*', 1), split_part(rec.caliber, '*', 2));
	ELSEIF position('X' in rec.caliber)>0 THEN
		greatestValue = GREATEST(split_part(rec.caliber, 'X', 1), split_part(rec.caliber, 'X', 2));
		leastValue = LEAST(split_part(rec.caliber, 'X', 1), split_part(rec.caliber, 'X', 2));
	ELSEIF position('×' in rec.caliber)>0 THEN
		greatestValue = GREATEST(split_part(rec.caliber, '×', 1), split_part(rec.caliber, '×', 2));
		leastValue = LEAST(split_part(rec.caliber, '×', 1), split_part(rec.caliber, '×', 2));
	ELSEIF rec.caliber='管径不详' or rec.caliber='不详' THEN
		greatestValue = 0;
		leastValue = 0;
	ELSE
		greatestValue = rec.caliber;
		leastValue = rec.caliber;
	END IF;
	UPDATE ys_line SET greatest_caliber=greatestValue,least_caliber=leastValue WHERE gid = rec.gid;
END LOOP;

--添加字段
ALTER TABLE ws_line
ADD COLUMN greatest_caliber NUMERIC;
ALTER TABLE ws_line
ADD COLUMN least_caliber NUMERIC;
--遍历雨水管线管径
For rec in (SELECT gid,caliber from ws_line) loop
	IF position('*' in rec.caliber)>0 THEN
		greatestValue = GREATEST(split_part(rec.caliber, '*', 1), split_part(rec.caliber, '*', 2));
		leastValue = LEAST(split_part(rec.caliber, '*', 1), split_part(rec.caliber, '*', 2));
	ELSEIF position('X' in rec.caliber)>0 THEN
		greatestValue = GREATEST(split_part(rec.caliber, 'X', 1), split_part(rec.caliber, 'X', 2));
		leastValue = LEAST(split_part(rec.caliber, 'X', 1), split_part(rec.caliber, 'X', 2));
	ELSEIF position('×' in rec.caliber)>0 THEN
		greatestValue = GREATEST(split_part(rec.caliber, '×', 1), split_part(rec.caliber, '×', 2));
		leastValue = LEAST(split_part(rec.caliber, '×', 1), split_part(rec.caliber, '×', 2));
	ELSEIF rec.caliber='管径不详' or rec.caliber='不详' THEN
		greatestValue = 0;
		leastValue = 0;
	ELSE
		greatestValue = rec.caliber;
		leastValue = rec.caliber;
	END IF;
	UPDATE ws_line SET greatest_caliber=greatestValue,least_caliber=leastValue WHERE gid = rec.gid;
END LOOP;

--添加字段
ALTER TABLE hs_line
ADD COLUMN greatest_caliber NUMERIC;
ALTER TABLE hs_line
ADD COLUMN least_caliber NUMERIC;
--遍历雨水管线管径
For rec in (SELECT gid,caliber from hs_line) loop
	IF position('*' in rec.caliber)>0 THEN
		greatestValue = GREATEST(split_part(rec.caliber, '*', 1), split_part(rec.caliber, '*', 2));
		leastValue = LEAST(split_part(rec.caliber, '*', 1), split_part(rec.caliber, '*', 2));
	ELSEIF position('X' in rec.caliber)>0 THEN
		greatestValue = GREATEST(split_part(rec.caliber, 'X', 1), split_part(rec.caliber, 'X', 2));
		leastValue = LEAST(split_part(rec.caliber, 'X', 1), split_part(rec.caliber, 'X', 2));
	ELSEIF position('×' in rec.caliber)>0 THEN
		greatestValue = GREATEST(split_part(rec.caliber, '×', 1), split_part(rec.caliber, '×', 2));
		leastValue = LEAST(split_part(rec.caliber, '×', 1), split_part(rec.caliber, '×', 2));
	ELSEIF rec.caliber='管径不详' or rec.caliber='不详' THEN
		greatestValue = 0;
		leastValue = 0;
	ELSE
		greatestValue = rec.caliber;
		leastValue = rec.caliber;
	END IF;
	UPDATE hs_line SET greatest_caliber=greatestValue,least_caliber=leastValue WHERE gid = rec.gid;
END LOOP;
END;

$$ language plpgsql;
drop type AnalysisDataForLongitudinal;
-- 创建一种新的返回类型
CREATE TYPE AnalysisDataForLongitudinal AS    
(
		startnum VARCHAR,
		startsurfh NUMERIC,
		startx NUMERIC,
		starty NUMERIC,
		upstreamdepth VARCHAR,
		startdepth NUMERIC,
		endnum VARCHAR,
		endsurfh NUMERIC,
		endx NUMERIC,
		endy NUMERIC,
		downstreamdepth VARCHAR,
		enddepth NUMERIC,
		pipelength NUMERIC,
		roadname VARCHAR,
		caliber VARCHAR,
		material VARCHAR
);

DROP FUNCTION longitudinalsectionAnalysis(out character varying, in character varying);
CREATE or REPLACE FUNCTION longitudinalsectionAnalysis(pointnums character varying)
	RETURNS SETOF AnalysisDataForLongitudinal AS $$ 
	DECLARE
	-- 纵断面结果集
	return_record AnalysisDataForLongitudinal;
	-- 存储传入的参数
	char_array VARCHAR[];
	-- 存储查询sql
	query_sql VARCHAR;
	-- 线表
	line_table VARCHAR;
	-- 点表
	point_table VARCHAR;
	-- 查询结果集
	query_record RECORD;
	-- 循环
	i INTEGER;
	-- 查询结果临时变量
	query_value1 VARCHAR;
	query_value2 VARCHAR;

 
BEGIN
 
-- 遍历传入的数据组
  char_array = (SELECT string_to_array(pointnums,','));
	IF (SELECT char_array[1] ~ 'WS') THEN
		line_table = 'ws_line';
		point_table = 'ws_point';
	ELSEIF (SELECT char_array[1] ~ 'YS') THEN
		line_table = 'ys_line';
		point_table = 'ys_point';
	END IF;
 
	i = 1;
	WHILE i<array_length(char_array,1) LOOP
		IF char_array[i+2]='0' THEN
			raise notice '%',i;
			query_sql = 'select l.st_num startnum,p1.surfh startsurfh,p1.x startx,p1.y starty,l.st_depth startdepth,l.ed_num endnum,p2.surfh endsurfh,p2.x endx,p2.y endy,l.ed_depth enddepth,l.shape_leng pipelength,l.road_name roadname,l.caliber,l.material from (select st_num,st_depth,ed_num,ed_depth,shape_leng,road_name,caliber,material from ' || line_table || ' where st_num=''' || char_array[i] || ''' and ed_num=''' || char_array[i+1] || ''') l left join (SELECT mapno,surfh,x,y FROM ' || point_table || ' where mapno=''' || char_array[i] || ''') p1 on p1.mapno=l.st_num left join (SELECT mapno,surfh,x,y FROM ' ||point_table || ' where mapno=''' || char_array[i+1] || ''') p2 on p2.mapno=l.ed_num';
		EXECUTE query_sql into query_record;
			return_record.startnum = query_record.startnum;
			return_record.startsurfh = query_record.startsurfh;
			return_record.startx = query_record.startx;
			return_record.starty = query_record.starty;
			return_record.startdepth = query_record.startdepth;
			return_record.endnum = query_record.endnum;
			return_record.endsurfh = query_record.endsurfh;
			return_record.endx = query_record.endx;
			return_record.endy = query_record.endy;
			return_record.enddepth = query_record.enddepth;
			return_record.pipelength = query_record.pipelength;
			return_record.roadname = query_record.roadname;
			return_record.caliber = query_record.caliber;
			return_record.material = query_record.material;
		ELSE
			raise notice '--%',i;
			query_sql = 'select l.st_num startnum,p1.surfh startsurfh,p1.x startx,p1.y starty,l.st_depth startdepth,l.ed_num endnum,p2.surfh endsurfh,p2.x endx,p2.y endy,l.ed_depth enddepth,l.shape_leng pipelength,l.road_name roadname,l.caliber,l.material from (select st_num,st_depth,ed_num,ed_depth,shape_leng,road_name,caliber,material from ' ||line_table || ' where st_num=''' || char_array[i] || ''' and ed_num=''' || char_array[i+1] || ''') l left join (SELECT mapno,surfh,x,y FROM ' || point_table || ' where mapno=''' || char_array[i] || ''') p1 on p1.mapno=l.st_num left join (SELECT mapno,surfh,x,y FROM ' || point_table || ' where mapno=''' || char_array[i+1] || ''') p2 on p2.mapno=l.ed_num';
			EXECUTE query_sql into query_record;
			return_record.startnum = query_record.endnum;
			return_record.startsurfh = query_record.endsurfh;
			return_record.startx = query_record.endx;
			return_record.starty = query_record.endy;
			return_record.startdepth = query_record.enddepth;
			return_record.endnum = query_record.startnum;
			return_record.endsurfh = query_record.startsurfh;
			return_record.endx = query_record.startx;
			return_record.endy = query_record.starty;
			return_record.enddepth = query_record.startdepth;
			return_record.pipelength = query_record.pipelength;
			return_record.roadname = query_record.roadname;
			return_record.caliber = query_record.caliber;
			return_record.material = query_record.material;
		END IF;
		
			-- 查询上游埋深
			EXECUTE ('SELECT ''''||st_depth from ' || line_table || ' where flow=''1'' and st_num=''' || return_record.startnum || '''') into query_value1;
			EXECUTE ('SELECT ''''||ed_depth from ' || line_table || ' where flow=''0'' and ed_num=''' || return_record.startnum || '''') into query_value2;
			IF (query_value1 is null AND query_value2 IS NULL) THEN
				return_record.upstreamdepth = NULL;
			ELSEIF (query_value1 is null) THEN
				return_record.upstreamdepth = query_value2;
			ELSEIF (query_value2 is null) THEN
				return_record.upstreamdepth = query_value1;
			ELSE
				return_record.upstreamdepth = query_value1 || ',' || query_value2;
			END IF;
			-- 查询下游埋深
			EXECUTE ('SELECT ''''||ed_depth from ' || line_table || ' where flow=''1'' and ed_num=''' || return_record.endnum || '''') into query_value1;
			EXECUTE ('SELECT ''''||st_depth from ' || line_table || ' where flow=''0'' and st_num=''' || return_record.endnum || '''') into query_value2;
			IF (query_value1 is null AND query_value2 IS NULL) THEN
				return_record.downstreamdepth = NULL;
			ELSEIF (query_value1 is null) THEN
				return_record.downstreamdepth = query_value2;
			ELSEIF (query_value2 is null) THEN
				return_record.downstreamdepth = query_value1;
			ELSE
				return_record.downstreamdepth = query_value1 || ',' || query_value2;
			END IF;
			
		i = i+3;
		return next return_record;
	END LOOP;

END;

$$ LANGUAGE plpgsql;


SELECT * from longitudinalsectionAnalysis('WS666621,WS666623,0,WS666623,WS666624,1');

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值