从列A中选择最小值,其中列B不在数组

时间:2016-07-28 13:21:52

标签: sql crystal-reports odbc

我尝试为d11.xblood是按d11.xpid分组的最小值的患者选择访问权限 - 其中d11.xcaccess_type不是288,289或292.({ {1}}是按时间顺序排列的访问索引。)

  • d11.xblood:患者ID(int)
  • d11.xpid:患者的独特时间顺序指数' accessses(int)
  • d11.xblood:访问的唯一标识符(int)

我想为每个d11.xcaccess_type报告一行,其中d11.xpid是其各自d11.xblood的最小值(初始访问权限)。此外,如果d11.xpid的初始访问权限的d11.xpid值为288,289或292,我想排除该行。

我在Select Expert中尝试了几种变体:

d11.xcaccess_type

这样可以正确选择具有初始访问权限的行,但会删除当前访问权限不在数组中的行。我只想消除初始访问不在数组中的行。我怎么能做到这一点?

样本表:

{d11.xblood} = Minimum({d11.xblood},{d11.xpid}) and
not ({d11.xcaccess_type} in [288, 289, 292])

示例所需的输出:

xpid   xblood   xcaccess_type
----   ------   -------------
1       98       400
1       49       300
1       152      288
2       33       288
2       155      300
2       70       400
3       40       300
3       45       400

请注意xpid xblood xcaccess_type ---- ------ ------------- 1 49 300 3 40 300 不在输出中,因为xpid = 2的最小值排除了xblood。另请注意,即使xcaccess_type = 288xpid = 1,因为xcaccess_type = 288的{​​{1}}值较低,xblood仍然包含xpid = 1

1 个答案:

答案 0 :(得分:0)

如果您不想编写存储过程或自定义SQL来处理此问题,则可以添加另一个组。假设您最深的组(最接近详细信息部分的组)基于xpid进行排序,您可以在该组中添加一个组,将xcaccess_type从最低到最高排序。

取消新组的页眉和页脚,然后将此子句添加到详细信息部分:

({d11.xpid} = PREVIOUS({d11.xpid})
OR
({d11.xcaccess_type} in [288, 289, 292])

这应修改您的报告,以便只显示每人最低访问值的记录。如果最低访问值是三个禁用值之一,则不会显示xpid的记录。