教你快速确定SQLServer栏中的值

教你快速确定SQLServer栏中的值,第1张

教你快速确定SQLServer栏中的值,第2张

您有一个包含整数、浮点数、金额或日期的N列SQL Server表,您的任务是返回其中一列的值。甚至要求您一次计算几行的值,并返回一个记录集。

第一个任务意味着您可能不知道要比较哪一列或多少列,但情况并非总是如此。您可能确切地知道要比较哪些列,并且知道不可能添加任何新列。另一方面,你可能要做一个预防计划,并期待一些新的栏目可能会增加。写一个只是比较N个值的函数就可以完成这个任务,但是在其他情况下又有多大用处呢?

假设下面是你的表:

创建表[dbo]。[MinMax](

[MinMaxID] [int] IDENTITY(1,1)不为空,

[Value1] [int] NULL,

[Value2] [int] NULL,

[Value3] [int] NULL,

[Value4] [int] NULL,

约束[PK _ MinMax]主键聚集

[MinMaxID] ASC

)和(PAD_INDEX= OFF,IGNORE_DUP_KEY = OFF) ON [PRIMARY]

)开[主]

请注意,表定义允许在其四列中有空值。大多数情况下,我会尽量应用非空列,但在这种情况下,一个或几个日期列很可能包含空值;我当然不想输入错误的数据null来避免非NULL问题。所以我将所有日期列定义为空列。图1显示了一些可以插入到表中的示例值。
对于简单的Min()和Max()的函数,SQL有自己的规则,即比较一列中的值。由于没有内置函数来比较任意两个值并确定或最小值,所以应该自己编写这个函数。我决定称它们为Min2()和Max2()。见清单a..

您可以使用以下代码测试它们:

选择dbo。最小二乘(23,34)

选择dbo。Max2( 23,空)

选择dbo。Min2(空,34)

选择dbo。Max2( 23,空)

要比较原始表中的值,可以简单地嵌入函数调用,如下所示:

选择dbo。Max2(值1,dbo。Max2(值2,dbo。Max2(值3,值4)))

来自dbo。最大最小值

根据原始表,这次调用的结果如下:

10

27

81

还有一个问题:上面的代码将NULL转换为0。在Min2()函数中,这意味着如果有NULL值的参数,则返回结果为0。在大多数情况下,我认为这是合适的,但在某些特殊情况下,您可能希望返回NULL而不是0。

您可能编写了一个只接受四个参数的函数,但是这样的函数太特殊了,不能用于其他情况。花点时间考虑更一般的情况,你会得到更有用的函数。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 教你快速确定SQLServer栏中的值

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情