Toon posts:

SQLServer: GROUP BY van CASE statements

Pagina: 1
Acties:

Verwijderd

Topicstarter
Vraagje: als ik in één SQL statement naar SQLServer 7.0 wil GROUP-en op een CASE statement, dan moet ik in de GROUP BY het hele statement weer herhalen! Heeft iemand een handigere oplossing?

Voorbeeld:

SELECT CASE
WHEN tblBooks.Price < 10 THEN 'Cheap titles'
ELSE 'Expensive titles' END AS PriceRange,
COUNT(tblBooks.Title) AS Items
FROM tblBooks
GROUP BY PriceRange;

.. zou ik willen maar dat kan niet.

Wat wel werkt, maar omslachtig lijkt:

SELECT CASE
WHEN tblBooks.Price < 10 THEN 'Cheap titles'
ELSE 'Expensive titles' END AS PriceRange,
COUNT(tblBooks.Title) AS Items
FROM tblBooks
GROUP BY CASE WHEN tblBooks.Price < 10 THEN 'Cheap titles'
ELSE 'Expensive titles' END;

Response:

PriceRange Items
-------------------- --------
Cheap titles 45
Expensive titles 14

.. Het gewenste resultaat, maar ik moet het hele case statement in de group by herhalen! Kan dat niet handiger?

  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

GROUP BY 1 zou horen te werken

  • watzie
  • Registratie: Juni 2001
  • Laatst online: 07-07 16:26
SELECT
CASE
WHEN tblBooks.Price < 10 THEN 'Cheap titles' As PriceRange
ELSE 'Expensive titles' AS PriceRange
END
,COUNT(tblBooks.Title) AS Items
FROM tblBooks
GROUP BY PriceRange;

Werkt dat misschien? Group by's willen altijd een eenduidig genoemd label hebben dat altijd in het resultaat van de query komt, kennelijk lust ie as Pricerange aan het eind van een case blokje niet.
Vind zelf case constructies erg vies trouwens :r Heb helaas geen SQL7 om het voor je te testen.

Anders kun je twee selects met group by doen en daar een union van maken, performt sowieso beter bij grote dataset.