追加: SQL Server 2000 と 2005 で作業しているため、両方で作業する必要があります。また、value_rk は数値/整数ではありません (エラー: オペランド データ型の uniqueidentifier は min 演算子に対して無効です)
返された他の列を気にしない場合に、単一列の「DISTINCT」一致を行う方法はありますか? 例:
**Table**
Value A, Value L, Value P
Value A, Value Q, Value Z
最初の行 (値 A) に基づいて、これらの行の 1 つだけを返す必要があります。2 列目と 3 列目の結果が必要です (2 列目は実際には全体的に一致するはずですが、3 列目は一意のキーであり、少なくとも 1 つ必要です)。
明らかに機能しませんが、これまでのところ私が持っているものは次のとおりです。
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 は私の大きな問題ですが、必要なのは 1 つだけです。
注: value_rk は数値ではないため、これは機能しません
更新: 動作するバージョンがあります。おそらく、純粋な SQL バージョンよりもかなり遅いですが、正直なところ、この時点で動作するものは何もないよりはましです。最初のクエリの結果を取得し、結果を 1 つに制限することを除いて 2 番目のクエリを実行し、一致する値に一致する 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 で 1 つの列を明確に選択することができました。純粋な SQL Server 2000/2005 の提案は大歓迎です :)