增加:使用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