2012-08-13 29 views
16

Estoy tratando de escribir una consulta SQL que selecciona varias columnas de una tabla con el operador distinto en una sola columna.Consulta SQL Varias columnas usando Distintivo en una sola columna

La tabla es simple. Las columnas son:

tblFruit_ID, tblFruit_FruitType, tblFruit_FruitName 
int   NVarChar   Text 

Estoy tratando de seleccionar todo el tblFruit_FruitType con su correspondiente tblFruit_ID.

que he intentado:

Select Distinct(tblFruit_FruitType), tblFruit_ID FROM tblFruit 

-Returns todos los resultados, no sólo distintas

Select tblFruit_FruitType, tblFruit_ID FROM tblFruit Group By tblFruit_FruitType 

-Errors con la columna tblFruit_ID es válida en la lista de selección, ya que no está contenida en cualquiera de un agregado función o la cláusula GROUP BY.

Select tblFruit_FruitType, tblFruit_ID FROM tblFruit Group By tblFruit_FruitType, tblFruit_ID 

-Returns todos los resultados, no sólo distintas

También he comprobado estos puestos similares y no podía conseguir cualquier cosa que funcione :(

mySQL select one column DISTINCT, with corresponding other columns

SQL Server Distinct Union for one column

suerte esta es suficiente información para una respuesta.

¡Gracias por su tiempo!

EDITAR (datos de muestra y los resultados deseados)

tblFruit_ID, tblFruit_FruitType, tblFruit_FruitName 
int   NVarChar   Text 
1   Citrus    Orange 
2   Citrus    Lime 
3   Citrus    Lemon 
4   Seed    Cherry 
5   Seed    Banana 

Resultados:

1   Citrus 
4   Seed 
+0

Mensaje muestra de datos y resultados deseados, por favor. –

Respuesta

24
select * from tblFruit where 
tblFruit_ID in (Select max(tblFruit_ID) FROM tblFruit group by tblFruit_FruitType) 
+0

Esta consulta devuelve las filas correctas con los resultados. Por favor, consulte la respuesta a continuación para obtener más información sobre lo que está sucediendo. – Steve

+0

La respuesta a continuación también funciona para producir los resultados deseados. – Steve

+0

Gracias! Ayudó mucho – MaxG

17

Debe utilizar una función de agregado en las columnas contra el que no se está agrupando. En este ejemplo, elegí arbitrariamente la función Min. Está combinando las filas con el mismo valor FruitType. Si tengo dos filas con el mismo valor FruitType pero diferentes valores de Fruit_Id, por ejemplo, ¿qué debería hacer el sistema?

Select Min(tblFruit_id) As tblFruit_id 
    , tblFruit_FruitType 
From tblFruit 
Group By tblFruit_FruitType 

SQL Fiddle example

+0

Agradable. Muchas gracias. Esto funcionó perfectamente y realmente entiendo todo lo que hace ahora. Ojalá pudiera votar más de una vez. – Steve

+0

Nota: En esta consulta Min (tblFruit_id) y Min (tblFruit_FruitName) pueden ser de diferentes filas (Fruits diferentes) – valex

+0

Tiene razón. La consulta proporciona los mismos resultados deseados pero devuelve valores de otras filas. – Steve

0

que se necesita para hacer lo mismo y tuvo que consultar una consulta para obtener el resultado

puse mi primera consulta hasta traer a todos los ID de la mesa y toda otra información necesaria para filtrar:

SELECT tMAIN.tLOTS.NoContract, tMAIN.ID 
FROM tMAIN INNER JOIN tLOTS ON tMAIN.ID = tLOTS.id 
WHERE (((tLOTS.NoContract)=False)); 

Guardar esto como Q04_1 -0 este returne d 1229 resultados (hay 63 registros únicos para consultas - soime con múltiples lotes)

SELECT DISTINCT ID 
FROM q04_1; 

guardada que como q04_2

Entonces escribí otra consulta que reunió la información requerida relacionado con el ID

SELECT q04_2.ID, tMAIN.Customer, tMAIN.Category 
FROM q04_2 INNER JOIN tMAIN ON q04_2.ID = tMAIN.ID; 

Trabajé como un regalo y obtuve exactamente lo que necesitaba: 63 registros únicos devueltos con detalles de clientes y categorías.

Esta es la forma en que trabajé alrededor de ella ya que no podía conseguir el Grupo Al trabajar en absoluto - aunque soy más bien "húmeda detrás de las orejas" SQL weith (así que por favor sea amable y constructivo con retroalimentación)

Cuestiones relacionadas