отображать количество в одном поле на основе разных критериев из одной таблицы - PullRequest
3 голосов
/ 06 мая 2011

Скажем, в моей таблице только 2 поля: Id и color.

id  color
----------
1   Green
2   Red
3   Yellow

Я хочу, чтобы счетчик отображался в строке, а не в столбце.

  SELECT COUNT(color), color
    FROM MYTABLE
GROUP BY color

Это дает мне:

count   color
--------------
10      Green
20      Red
15      Yellow

Мне нужно, чтобы оно отображалось как:

Green  Red  Yellow
-------------------
10     20   15

Ответы [ 4 ]

3 голосов
/ 06 мая 2011
SELECT
  COUNT(CASE Color WHEN 'Green'  THEN 1 END) AS Green,
  COUNT(CASE Color WHEN 'Red'    THEN 1 END) AS Red,
  COUNT(CASE Color WHEN 'Yellow' THEN 1 END) AS Yellow
FROM MYTABLE

Вам не нужно группировать здесь. По сути, каждый COUNT проходит все строки, но считает только те, где Color соответствует определенному значению.

1 голос
/ 06 мая 2011

Другой способ сделать это ( только в MySQL ):

SELECT SUM(color = 'Green')  AS "Green"
     , SUM(color = 'Red')    AS "Red"
     , SUM(color = 'Yellow') AS "Yellow"
FROM MyTable ;
1 голос
/ 06 мая 2011
select (select COUNT(color) from MyTable where color='Green') as 'Green', 
       (select COUNT(color) from MyTable where color='Red') as 'Red'. 
       (select COUNT(color) from MyTable where color='Yellow') as 'Yellow'
0 голосов
/ 06 мая 2011

Попробуйте эту ссылку http://blog.programmingsolution.net/sql-server-2008/sql-server-pivot-converting-rows-to-columns-with-dynamic-query/

, но если вы делаете что-то подобное

 select [ID],[COLOUR] from

 ( SELECT [ID],[COLOUR] FROM [dbo].[table] ) as S

 Pivot ( COUNT([COLOUR])

 FOR COLOUR IN ([YELLOW],[RED],[GREEN])

 ) as P
...