增加:需要与SQL Server 2000和2005一起使用,因此必须在两个版本上运行。此外,value_rk不是数字/整数(错误:min操作符的操作数据类型uniqueidentifier无效)
当我不关心返回的其他列时,有没有一种方法可以进行单列“DISTINCT”匹配?例如:
**Table**
Value A, Value L, Value P
Value A, Value Q, Value Z
基于第一行中的内容(值A),我需要仅返回其中一行。 我仍然需要第二列和第三列的结果(第二列实际上应该在所有情况下都匹配,但第三列是唯一键,我至少需要其中一个)。
这是我目前所拥有的,尽管显然它不起作用:
SELECT value, attribute_definition_id, value_rk
FROM attribute_values
WHERE value IN (
SELECT value, max(value_rk)
FROM attribute_values
)
ORDER BY attribute_definition_id
我在使用ColdFusion工作,因此如果有简单的解决方法,我也可以考虑。 我试图限制或按“value”分组第一列。 value_rk是我的大问题,因为每个值都是唯一的,但我只需要一个。
注意:value_rk不是数字,因此这不起作用。
更新:我有一个可行的版本,它可能比纯SQL版本慢得多,但说实话,任何工作的东西现在都比没有好。 它从第一个查询的结果中取出数据,执行第二个查询,除了将结果限制为一个之外,还获取与匹配的值相匹配的value_rk。 就像这样:
<cfquery name="queryBaseValues" datasource="XXX" timeout="999">
SELECT DISTINCT value, attribute_definition_id
FROM attribute_values
ORDER BY attribute_definition_id
</cfquery>
<cfoutput query="queryBaseValues">
<cfquery name="queryRKValue" datasource="XXX">
SELECT TOP 1 value_rk
FROM attribute_values
WHERE value = '#queryBaseValues.value#'
</cfquery>
<cfset resourceKey = queryRKValue.value_rk>
...
所以,这就是在 ColdFusion 中选择单个不同列的方法。任何关于纯 SQL Server 2000/2005 的建议仍然非常受欢迎 :)