补充:使用 SQL Server 2000 和 2005,因此必须同时在两者上工作。此外,value_rk 不是数字/整数(错误:操作数数据类型唯一标识符对 min 运算符无效)
当我不关心返回的其他列时,有没有办法进行单列“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_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 建议:)