我看到了类似的问题How to get second highest value among multiple columns in SQL ... ...但是该解决方案不适用于Microsoft Access(Row_Number / Over Partition在Access中无效)。
“我的访问”查询包含数十个字段。我想创建一个新的字段/列,该字段/列将返回查询中包含的10个特定列的第二个最大值,我将此字段称为“封面”。像这样:
Product Bid1 Bid2 Bid3 Bid4 Cover
Watch 104 120 115 108 115
Shoe 65 78 79 76 18
Hat 20 22 19 20 20
我可以做一个很长的SWITCH
公式,例如以下等效的Excel公式:
IF( AND(Bid1> Bid2, Bid1 > Bid3, Bid1 > Bid4), Bid1,
AND(Bid2> Bid1, Bid2 > Bid3, Bid2 > Bid4), Bid2,
.....
但是必须有一个更有效的解决方案。如果MS-Access查询具有这样的功能,则等效的MAXIF
可以很好地工作。
有什么想法吗?预先谢谢你。
答案 0 :(得分:1)
如果将数据布置在更normalized way的位置,这会更容易。提示是编号的字段名称。
您的数据当前以Pivot的形式组织(在Access中称为crosstab),但可以很容易地归类为Unpivoted。
如果以更标准化的方式放置此数据,则更容易处理,这种情况是:
Product Bid Amount
--------- ----- --------
Watch 1 104
Watch 2 120
Watch 3 115
Watch 4 108
Shoe 1 65
Shoe 2 78
Shoe 3 79
Shoe 4 76
Hat 1 20
Hat 2 22
Hat 3 19
Hat 4 20
这种查询方式变得更简单。
您似乎想要最高出价(按产品分组),所以:
select Product, max(amount) as maxAmount
from myTable
group by product
真的,我们根本不应该存储文本字段,因此Product应该是一个ID号,并且关联的产品名称一次存储在单独的表中,而不是多次< / em>,例如:
ProdID ProdName
-------- ----------
1 Watch
2 Shoe
3 Hat
...但这是另一堂课。
一般来说,应该避免重复任何内容 ...这几乎是数据库的目的 ...但是下面的链接会比我解释。:)
Quackit:Microsoft Access Tutorial
YouTube:DB Planning
Microsoft:Database Design Basics
Microsoft:Database Normalization Basics