Dodano: Praca z SQL Server 2000 i 2005, więc musi działać na obu. Ponadto, wartość_rk nie jest liczbą/liczbą całkowitą (Błąd: Niepoprawny identyfikator typu danych Operand jest nieprawidłowy dla operatora min)Wybierz jedną kolumnę DISTINCT SQL
Czy istnieje sposób na wykonanie pojedynczej kolumny "DISTINCT", gdy nie interesują mnie inne kolumny zwrócone ? Przykład:
**Table**
Value A, Value L, Value P
Value A, Value Q, Value Z
Muszę zwrócić tylko jeden z tych wierszy na podstawie tego, co jest w pierwszym (wartość A). Nadal potrzebuję wyników z drugiej i trzeciej kolumny (druga powinna w rzeczywistości pasować do całej tablicy, ale trzecia to unikatowy klucz, którego potrzebuję co najmniej jednego z nich).
Oto co mam do tej pory, choć oczywiście nie dział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
pracuję w ColdFusion więc jeśli jest to proste obejście, że jestem otwarty na to, jak dobrze . Próbuję ograniczyć lub "pogrupować według" pierwszej kolumny "wartość". value_rk jest moim dużym problemem, ponieważ każda wartość jest wyjątkowa, ale potrzebuję tylko jednego.
UWAGA: value_rk nie jest liczbą, stąd ten NIE DZIAŁA
UPDATE: Mam wersję roboczą, to prawdopodobnie trochę wolniej niż czystej wersji SQL, ale szczerze coś działa w tym momencie jest lepsze niż nic. Pobiera wyniki z pierwszego zapytania, wykonuje drugie zapytanie, z wyjątkiem ograniczania wyników do jednego i pobiera pasujący argument value_rk dla pasującej wartości. Tak jak poniżej:
<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>
...
Tak więc masz go, wybierając pojedynczą kolumnę wyraźnie w ColdFusion. Wszelkie czyste sugestie programu SQL Server 2000/2005 są nadal mile widziane :)
Czy możesz wyjaśnić, czego potrzebujesz? Dowolny wiersz, ale tylko jeden wiersz na wartość? Wiersz o wartości, która ma maksymalną wartość_rk? Nie jestem pewien, czy rozumiem, co tu robisz. – tvanfosson
> UWAGA: wartość_rk nie jest liczbą, dlatego to NIE DZIAŁA. Nie ma to nic wspólnego z przyczynami niepowodzenia zapytania. Nie wspominałeś o RDBMS, którego używasz, ale w Oracle możesz użyć MAX w kolumnach znaków. –
MS SQL może również używać MAX w kolumnach nieliczbowych. – BradC