增加:使用SQL Server 2000和2005,因此必须同时使用两者。此外,value_rk不是一个数字/整数(错误:操作数数据类型uniqueidentifier无效最小运算符)选择一列DISTINCT SQL
有没有办法做单列“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版本慢了不少,但老实说,任何在这一点上工作总比没有好。它从第一个查询中得到结果,除第一个查询外,第二个查询将结果限制为1,并为匹配的值抓取匹配的值__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建议仍然非常受欢迎:)
你能说清楚你需要什么吗?任何行,但每个值只有一行?具有最大值value_rk的那一行?我不确定自己明白你要去哪里。 – tvanfosson 2008-10-30 18:49:10
>注意:value_rk不是数字,因此这不起作用。 这与您的查询失败原因无关。您没有提到您正在使用的RDBMS,但在Oracle中,您可以在字符列上使用MAX。 – 2008-10-30 18:55:31
MS SQL也可以在非数字列上使用MAX。 – BradC 2008-10-30 18:56:51