选择 SQL 表中的所有唯一值以及附加信息

问题描述 投票:0回答:1

我正在尝试查找第一个唯一值 TaxGroupCode 的第一个 SeqGrp 和 SeqNum。我在 MSACCESS 查询中使用了此查询(如下所示),但我们最近开始使用 SQL 2008。然而,似乎“FIRST”在 SQL 中不是一个有效的函数(至少在这个版本中)。

SELECT DISTINCT First(DesotoCoPA_Trims.SeqGrp) & "-" &  First (DesotoCoPA_Trims.SeqNum), "Tax District " & DesotoCoPA_Trims.TaxGroupCode As Sample
FROM  DesotoCoPA_Trims
GROUP BY DesotoCoPA_Trims.TaxGroupCode;

这会产生:

GrpSeq  Sample
2-28    Tax District 2   
5-31    Tax District 3   
6-2123  Tax District 7   
6-2128  Tax District 1   
6-9694  Tax District 6    

我对 SQL 比较陌生,所以我不知道如何解决这个问题。我不需要专门以这种方式格式化结果。

sql ms-access
1个回答
0
投票

您需要获取较新版本的 SQL Server。

原因之一是 SQL Server 2008 已经完全过时了。它已经超过 5 年没有任何补丁或更新了……甚至没有关键的安全更新。继续使用它是危险且不负责任的。我知道您可能无法直接进行此更改,但您可能能够将这种需求(不想要!)推向链条。

但另一个原因是新版本的 SQL Server 可以让你轻松解决这个问题。

为了理解其中的原理,首先我需要解释一下关系集合论。真正的关系数据库对于集合中的第一项或最后一项没有“任何概念”。如果没有明确的 ORDER BY 指令,他们可以自由地以他们认为方便的任何顺序返回行。这通常会与存储在磁盘上或主键中的顺序匹配,但是对于给定的查询运行,有很多事情可以改变这一点。数据库可以从

相同的 sql
相同的数据给出不同的结果 这样不好。

Access 的

First()

功能违反了这一原则,因此从未被添加到最重要的数据库产品中。

较新版本的 SQL Server 有一种称为“窗口函数”的功能,其中一个是 

First_Value()

。此函数是 ANSI 标准的一部分,并使用 
OVER 子句,您将在其中包含
ORDER BY
定义,以便获得确定性结果。
此功能在 SQL Server 2008 中尚不可用。

好消息是,任何足够小以适合 MS Access 的数据库也可能很容易满足当前 SQL Server 版本的

free

Express 版本的限制。如果由于操作系统太旧而无法安装,这也是一个严重问题

© www.soinside.com 2019 - 2024. All rights reserved.