相关疑难解决方法(0)

SQL Server:临时收集聚合中的值并在同一查询中重用

如何在T-SQL中累积值?AFAIK没有ARRAY类型.
我想重新使用同一查询中的值,如使用array_agg()在此PostgreSQL示例中演示的那样.

SELECT a[1] || a[i] AS foo
      ,a[2] || a[5] AS bar  -- assuming we have >= 5 rows for simplicity
FROM   (
    SELECT array_agg(text_col ORDER BY text_col) AS a
          ,count(*)::int4 AS i
    FROM   tbl
    WHERE  id between 10 AND 100
    ) x
Run Code Online (Sandbox Code Playgroud)

我如何用T-SQL最好地解决这个问题?
我能想出的最好的是两个CTE和子选择:

;WITH x AS (
  SELECT row_number() OVER (ORDER BY name) AS rn
        ,name AS a
  FROM   #t
  WHERE  id between 10 AND 100
  ), i AS (
  SELECT count(*) AS …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server arrays aggregate-functions

7
推荐指数
1
解决办法
7853
查看次数

PostgreSQL - SQL 状态:42601 语法错误

我想知道如何在函数内使用动态查询。我尝试了很多方法,但是,当我尝试编译我的函数时,会显示一条消息 SQL 42601。

我使用的代码:

CREATE OR REPLACE FUNCTION prc_tst_bulk(sql text)
RETURNS TABLE (name text, rowcount integer) AS 
$$
BEGIN
  WITH v_tb_person AS (return query execute sql)
  select name, count(*) from v_tb_person where nome like '%a%' group by name
  union
  select name, count(*) from v_tb_person where gender = 1 group by name;
END     
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

我收到的错误消息:

ERROR:  syntax error at or near "return"
LINE 5:     WITH v_tb_person AS (return query execute sql)
Run Code Online (Sandbox Code Playgroud)

我尝试使用:

WITH v_tb_person AS (execute sql)

WITH v_tb_person …
Run Code Online (Sandbox Code Playgroud)

database postgresql bulkinsert dynamic-sql plpgsql

7
推荐指数
1
解决办法
14万
查看次数