文章目录

  • 第五章 SQL聚合函数 %DLIST
  • 大纲
  • 参数
  • 描述
  • %DLIST 和 %SelectMode
  • %DLIST和ORDER BY
  • 相关的聚合函数
  • 示例

第五章 SQL聚合函数 %DLIST

创建值列表的聚合函数。

大纲

%DLIST([ALL | DISTINCT [BY(col-list)]] string-expr [%FOREACH(col-list)] [%AFTERHAVING])

参数

  • ALL - 可选-指定%DLIST返回string-expr的所有值的列表。如果未指定关键字,则这是默认值。
  • DISTINCT - 可选- DISTINCT子句,指定%DLIST返回一个结构化的%List,其中只包含唯一的string-expr值。
    DISTINCT可以指定BY(colo -list)子句,其中colo -list可以是单个字段,也可以是用逗号分隔的字段列表。
  • string-expr - 计算结果为字符串的SQL表达式。
    通常是所选表中列的名称。
  • %FOREACH(col-list) - 可选-列名或以逗号分隔的列名列表。
  • %AFTERHAVING - 可选-应用在HAVING子句中的条件。

描述

%DLIST聚合函数返回一个ObjectScript %List结构,其中包含指定列中的值作为列表元素。

一个简单的%DLIST(或%DLIST ALL)返回列表,该列表由所选行中string-expr的所有非null值组成。
string-exprNULL的行不会作为元素包含在列表结构中。

%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=ODBC, 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 :statelistFROM Sample.PersonWHERE Home_State %STARTSWITH 'A')w "The states (as list):",statelist,!w "The states (as string):",$LISTTOSTRING(statelist,"^")
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).DList()
The states (as list):ARALAZAZAZARALAZARALALAR
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 :statelistFROM Sample.PersonWHERE Home_State %STARTSWITH 'A')w "The states (as list):",statelist,!w "The states (as string):",$LISTTOSTRING(statelist,"^")
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).DList1()
The states (as list):ARALAZ
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

也许更有用的方法是在Home_City列中列出每个州的所有不同值,如下例所示:

SELECT Home_State,%DLIST(DISTINCT Home_City) AS CitiesList,COUNT(DISTINCT Home_City) AS DistinctCities,COUNT(Home_City) AS TotalCities
FROM Sample.Person
GROUP BY Home_State

注意,这个示例返回每个州的不同城市名称和总城市名称的整数计数。

下面的例子返回以“A”开头的Home_State值的%List结构。
它以%List元素形式返回不同的Home_State值(distinct Home_State);
与不同的Home_City值(distinct BY(Home_City) Home_State)相对应的Home_State值,这可能包括一个唯一的Home_City NULL;
和所有Home_State值:

SELECT %DLIST(DISTINCT Home_State) AS DistStates,%DLIST(DISTINCT BY(Home_City) Home_State) AS DistCityStates,%DLIST(Home_State) AS AllStates
FROM Sample.Person
WHERE Home_State %STARTSWITH 'A'

下面的动态SQL示例使用%SelectMode属性为%List结构FavoriteColors日期字段指定ODBC显示模式。
ODBC模式将每个列的值作为一个逗号分隔的列表返回,$LISTTOSTRING函数指定一个不同的分隔符(在这个例子中是||)来分隔不同列的值:

ClassMethod DList2()
{s myquery = "SELECT %DLIST(FavoriteColors) AS colors FROM Sample.Person WHERE Name %STARTSWITH 'A'"s tStatement = ##class(%SQL.Statement).%New()s tStatement.%SelectMode=1s qStatus = tStatement.%Prepare(myquery)if qStatus'=1 {w "%Prepare failed:" d $System.Status.DisplayError(qStatus) q}s rset = tStatement.%Execute()while rset.%Next() {w $LISTTOSTRING(rset.colors,"||"),!}w !,"End of data"
}
DHC-APP>d ##class(PHA.TEST.SQLCommand).DList2()
Orange,White||Red,White||Red||Blue||Green||BlueEnd of data

下面的示例使用了%AFTERHAVING关键字。
它为每个Home_State返回一行,其中至少包含一个满足HAVING子句条件的Name值(以“M”开头的名称)。
第一个%DLIST函数返回该状态的所有名称的列表。
第二个%DLIST函数返回的列表只包含满足HAVING子句条件的名称:

SELECT Home_State,%DLIST(Name) AS AllNames,%DLIST(Name %AFTERHAVING) AS HaveClauseNamesFROM Sample.PersonGROUP BY Home_StateHAVING Name LIKE 'M%'ORDER BY Home_state

第五章 SQL聚合函数 %DLIST相关推荐

  1. 第十三章 SQL聚合函数 XMLAGG

    文章目录 第十三章 SQL聚合函数 XMLAGG 大纲 参数 描述 XML和XMLAGG XMLAGG和ORDER BY 相关聚合函数 示例 第十三章 SQL聚合函数 XMLAGG 一个聚合函数,它创 ...

  2. 第七章 SQL聚合函数 LIST

    文章目录 第七章 SQL聚合函数 LIST 大纲 参数 描述 包含逗号的数据值 LIST 和 %SelectMode LIST 和 ORDER BY 最大列表大小 相关的聚合函数 示例 第七章 SQL ...

  3. 第十二章 SQL聚合函数 VARIANCE, VAR_SAMP, VAR_POP

    文章目录 第十二章 SQL聚合函数 VARIANCE, VAR_SAMP, VAR_POP 大纲 参数 描述 当前事务期间所做的更改 示例 第十二章 SQL聚合函数 VARIANCE, VAR_SAM ...

  4. 第二章 SQL聚合函数 AVG

    文章目录 第二章 SQL聚合函数 AVG 大纲 参数 描述 数据值 对单个值求平均值 优化 当前事务期间所做的更改 示例 第二章 SQL聚合函数 AVG 返回指定列值的平均值的聚合函数. 大纲 AVG ...

  5. 第九章 SQL聚合函数 MIN

    文章目录 第九章 SQL聚合函数 MIN 大纲 参数 描述 数据值 在当前事务期间所做的更改 示例 第九章 SQL聚合函数 MIN 返回指定列中的最小数据值的聚合函数. 大纲 MIN([ALL | D ...

  6. 第三章 SQL聚合函数 COUNT(一)

    文章目录 第三章 SQL聚合函数 COUNT(一) 大纲 参数 描述 没有行返回 流字段 第三章 SQL聚合函数 COUNT(一) 返回表或指定列中的行数的聚合函数. 大纲 COUNT(*)COUNT ...

  7. 第四章 SQL聚合函数 COUNT(二)

    文章目录 第四章 SQL聚合函数 COUNT(二) 权限 性能 未提交事务所做的更改 示例 第四章 SQL聚合函数 COUNT(二) 权限 要使用COUNT(*),必须对指定的表具有表级别的SELEC ...

  8. 第十一章 SQL聚合函数 SUM

    文章目录 第十一章 SQL聚合函数 SUM 大纲 参数 描述 数据值 优化 当前事务期间所做的更改 示例 第十一章 SQL聚合函数 SUM 返回指定列值之和的聚合函数. 大纲 SUM([ALL | D ...

  9. 第九十五章 SQL函数 MINUTE

    文章目录 第九十五章 SQL函数 MINUTE 大纲 参数 描述 示例 第九十五章 SQL函数 MINUTE 返回日期时间表达式的分钟的时间函数. 大纲 {fn MINUTE(time-express ...

最新文章

  1. java接口测试入门
  2. Linux安装jupyter debugger+Conda设置proxy代理
  3. 高斯 matlab程序,高斯金字塔 matlab程序实现
  4. hibernate系列之四
  5. 没有躲过的坑--vector使用erase后迭代器变成野指针
  6. 通过数据流处理-微信小程序生成临时二维码
  7. python自动检测网站_Web全自动化测试Python + Pytest+Selenium+ Saucelabs 转
  8. structs常见错误
  9. 微分中值定理 (罗尔、拉格朗日、柯西)
  10. excel中两列如何进行交叉排列组合
  11. Smartphone--Android真机管理平台
  12. v-model的radio checkbox以及键盘修饰符使用
  13. 大学物理实验长度的测量实验报告_大学物理实验长度的测量实验总结
  14. 在Linux7关机命令,linux关机命令 【使用指南】
  15. java操作txt文本(一):遇到指定字符换行
  16. 优雅编程之这样使用Map,你就“正常”了(三十六)
  17. css清除浮动带来的负面影响
  18. 神舟炫龙银魂t1是哪年的_我的天呐 对比发现炫龙银魂T1竟然这么强
  19. linux建立u盘引导分区表,创建Linux之USB启动盘
  20. 高斯分布的积分期望E(X)方差V(X)的理论推导

热门文章

  1. 基于FAST的TSN交换(1)TSN交换机制概述
  2. 鞋店收银系统用什么软件
  3. 基于STAN的风力发电预测(Python代码实现)
  4. ARM中汇编程序实例小笔记
  5. Microsoft Excel 教程:如何在 Excel 中创建下拉列表?
  6. Matlab——0-1整数规划
  7. tushare 之get_today_all修复接口完整code
  8. 浏览器解析json报 SyntaxError: Unexpected token { 错误 迅雷插件导致js获取后端返回结果报错
  9. 癌症被诊断的时候有多少细胞
  10. 恶意代码分析实战 Lab 3-3