2010-11-16 6 views
1

Queryretours Sélectionnez min de ligne vide

select min Price, min year from tblProduct 

retours de résultats vide (""). Je ne veux que des résultats en chiffres. Comment je fais ça?

Exemple:

tblProduct 
Price Year 

1000 2008 
2000 2009 
500 2001 
     2005 
200 2000 

Le résultat est le prix "", année 2000. Je veux que le résultat soit le prix de 200, année 2000

+0

Quelle version de SQL utilisez-vous (MySQL, SQL Server, etc.)? –

+0

Je suppose que vous avez défini le prix comme un champ d'infiltration. Définissez-le comme un champ numérique et utilisez Mulls pour indiquer aucune valeur plutôt qu'une chaîne vide. –

+0

SQL Server, je ne veux pas une valeur vide. Je veux la valeur min – Nicklas

Répondre

3

Tout d'abord, quel est votre SGBDR? Pour ceux que j'ai essayés (MySQL et PostgreSQL), MIN ignore NULL.

Par conséquent, je suppose que votre colonne est de type varchar ou texte. Ce qui n'a pas de sens pour un prix, alors je vous suggère de le changer en type numérique.

Si vous ne voulez pas, alors j'utiliser quelque chose comme ceci:

SELECT MIN(price), MIN(year) 
FROM tblProduct 
WHERE price <> '' 

Ce qui renverrait (200, 2000). Mais vraiment, ça n'a pas de sens. Vous souhaitez utiliser un type numérique et vous souhaitez utiliser NULL au lieu d'utiliser une chaîne vide.

+0

Super, ça marche comme je veux, merci! – Nicklas

3

Cela donnera la valeur minimale pour chaque année

Select min(p.price) , year 
    from 
    tblProduct p 
    WHERE p.price <> '' 
    Group by 
     p.year 

Cela vous donnera l'année et le prix pour le prix min.

Cela peut entraîner plusieurs lignes lorsque plus d'un an a le Prix min

Select p.year, p.price from 
tblProduct p inner join 
    (Select min (Price) price 
    from tblProduct where price is not null) minP 
on p.price = minp.Price 
+0

MIN ignore NULL, votre première réponse était probablement meilleure (en supposant que le prix est varchar ou texte). Edit: Woah, vous faites tout plus difficile, OP semble vouloir le prix minimum et l'année minimum, pas nécessairement l'année liée au prix minimum. –

+0

Vous avez oublié vos parenthèses;) – Raymund

+0

@Vincent. Tu as raison, je fais probablement de mauvaises suppositions. Ce n'est pas clair pour moi ce que l'on veut. Probablement le premier. –

1

Essayez celui

SELECT  MIN(Price) AS Price, MIN(Year) AS Year 
FROM   tblProduct 
HAVING  (MIN(Price) IS NOT NULL) OR 
         (MIN(Price) <> '') 
+0

Cela reviendrait 2005 pour l'année. L'OP recherche 2000 –

+0

Oops ne l'a pas compris au début – Raymund

+0

MIN ignore NULL, et une chaîne vide est différente de null, donc cela ne fonctionnera probablement pas. Même si c'était le cas, il sélectionnerait 0 au lieu de 200, donc cela ne fonctionnerait pas. –

0

MIN, MAX, SUM, AVG et certains autres agrégats retourneront NULL si une valeur NULL existe dans l'ensemble de données. Vous voulez utiliser:

SELECT ISNULL(MIN(Price),0) as MinPrice, ISNULL(MIN(Year),0) as MinYear FROM tblProduct 
+0

Ce n'est pas vrai, du moins pas pour chaque SGBDR. –

+0

Bon appel, je pensais spécifiquement à MS SQL Server. –