SQL聚合函数 %DLIST
创建值列表的聚合函数。
大纲
代码语言:javascript复制%DLIST([ALL | DISTINCT [BY(col-list)]] string-expr [%FOREACH(col-list)] [�TERHAVING])
参数
-
ALL
- 可选-指定%DLIST
返回string-expr
的所有值的列表。如果未指定关键字,则这是默认值。 -
DISTINCT
- 可选-DISTINCT
子句,指定%DLIST
返回一个结构化的%List
,其中只包含唯一的string-expr
值。DISTINCT
可以指定BY(colo -list)
子句,其中colo -list
可以是单个字段,也可以是用逗号分隔的字段列表。 -
string-expr
- 计算结果为字符串的SQL表达式。 通常是所选表中列的名称。 -
%FOREACH(col-list)
- 可选-列名或以逗号分隔的列名列表。 -
�TERHAVING
- 可选-应用在HAVING
子句中的条件。
描述
%DLIST
聚合函数返回一个ObjectScript %List
结构,其中包含指定列中的值作为列表元素。
一个简单的%DLIST
(或%DLIST ALL
)返回列表,该列表由所选行中string-expr
的所有非null
值组成。
string-expr
为NULL
的行不会作为元素包含在列表结构中。
%DLIST DISTINCT
返回一个列表,由所选行中string-expr
的所有不同(唯一)非null
值组成:%DLIST(DISTINCT col1)
。
NULL
不作为元素包含在%List
结构中。
%DLIST(DISTINCT BY(col2) col1)
返回一个元素的%List
,其中只包含那些col1
字段值在col2
值不同(唯一)的记录中。
但是请注意,不同的col2
值可能包含一个单独的NULL值。
%DLIST 和 %SelectMode
可以使用%SelectMode
属性来指定%DLIST
返回的数据显示模式:0=Logical(默认)
,1=ODB
C, 2= display
。
请注意,在ODBC模式下,%DLIST
用逗号分隔列值列表,而$LISTTOSTRING
(默认情况下)返回%List
列值中用逗号分隔的元素。
%DLIST和ORDER BY
%DLIST
函数将表中多行列的值组合成%List
结构的值列表。
因为在计算所有聚合字段之后,查询结果集中应用了一个ORDER BY
子句,所以ORDER BY
不能直接影响这个列表中的值序列。
在某些情况下,%DLIST
结果可能会按顺序出现,但不应依赖此顺序。
在给定聚合结果值中列出的值不能显式排序。
相关的聚合函数
-
%DLIST
返回一个IRIS列表的值。 -
LIST
返回一个逗号分隔的值列表。 -
JSON_ARRAYAGG
返回值的JSON
数组。 -
XMLAGG
返回一个串接的值字符串。
示例
下面的嵌入式SQL示例返回一个主机变量,该变量包含示例的Home_State
列中列出的所有值的IRIS列表。
以字母A
开头的人名表:
ClassMethod DList()
{
&sql(
SELECT %DLIST(Home_State)
INTO :statelist
FROM Sample.Person
WHERE Home_State %STARTSWITH 'A')
w "The states (as list):",statelist,!
w "The states (as string):",$LISTTOSTRING(statelist,"^")
}
代码语言:javascript复制DHC-APP>d ##class(PHA.TEST.SQLCommand).DList()
The states (as list):�AR�AL�AZ�AZ�AZ�AR�AL�AZ�AR�AL�AL�AR
The states (as string):AR^AL^AZ^AZ^AZ^AR^AL^AZ^AR^AL^AL^AR
请注意,这个IRIS列表包含具有重复值的元素。
下面的嵌入式SQL示例返回一个主机变量,该变量包含示例的Home_State
列中列出的所有不同(唯一)值的IRIS列表。
以字母A开头的人名表:
ClassMethod DList1()
{
&sql(
SELECT %DLIST(DISTINCT Home_State)
INTO :statelist
FROM Sample.Person
WHERE Home_State %STARTSWITH 'A')
w "The states (as list):",statelist,!
w "The states (as string):",$LISTTOSTRING(statelist,"^")
}
代码语言:javascript复制DHC-APP>d ##class(PHA.TEST.SQLCommand).DList1()
The states (as list):�AR�AL�AZ
The states (as string):AR^AL^AZ
下面的SQL
示例为每个州创建了一个 IRIS列表,其中包含在Home_City
列中找到的所有值,以及按州列出的这些城市值的计数。
每个Home_State
行包含该状态的所有Home_City
值的列表。
这些名单可能包括重复的城市名称:
SELECT Home_State,
%DLIST(Home_City) AS AllCities,
COUNT(Home_City) AS CityCount
FROM Sample.Person
GROUP BY Home_State