1

I have a table in my database

+------+------+----------+
| id   | dept | location |
+------+------+----------+
|    1 | eee  | chennai  |
|    2 | ece  | chennai  |
|    3 | eee  | chennai  |
|    4 | ece  | chennai  |
|    5 | eee  | cbe      |
|    6 | ece  | trichy   |
|    7 | mech | madurai  |
+------+------+----------+

I need the count of id on transposing one of the column. Can anyone suggest me the query to get the result below

+---------+------+-----+------+
| location| eee  | ece | mech |
+---------+------+-----+------+
| chennai | 2    | 2   |  0   |
| cbe     | 1    | 0   |  0   |
| trichy  | 0    | 1   |  0   |
| madurai | 0    | 0   |  1   |
+---------+------+-----+------+

Thank you for any help

Shadow
  • 33,525
  • 10
  • 51
  • 64
Jagadesh jakes
  • 107
  • 1
  • 10

3 Answers3

3
select location as city,
       sum(dept = 'eee') as eee,
       sum(dept = 'ece') as ece,
       sum(dept = 'mech') as mech
from your_table
group by location
juergen d
  • 201,996
  • 37
  • 293
  • 362
  • Thank you juergen d. It worked well. – Jagadesh jakes Jul 19 '18 at 05:33
  • How many times are you going to answer the exactly the same question without marking it a duplicate? For example https://stackoverflow.com/questions/36515502/group-rows-into-columns-with-sum or https://stackoverflow.com/questions/39767137/mysql-group-by-a-column-and-show-values-in-different-columns – Shadow Jul 19 '18 at 05:40
2

TRY SUM with CASE

create table test(id INT, dept VARCHAR(20), location VARCHAR(100))
insert into test values
(1,'eee','chennai'),
(2,'ece','chennai'),
(3,'eee','chennai'),
(4,'ece','chennai'),
(5,'eee','cbe'),
(6,'ece','trichy'),
(7,'mech','madurai')

SELECT 
    location AS city,
    SUM(CASE WHEN dept = 'eee' THEN 1 ELSE 0 END) eee,
    SUM(CASE WHEN dept = 'ece' THEN 1 ELSE 0 END) ece,
    SUM(CASE WHEN dept = 'mech' THEN 1 ELSE 0 END) mech
FROM test
GROUP BY location

OUTPUT

city    eee ece mech
cbe     1   0   0
chennai 2   2   0
madurai 0   0   1
trichy  0   1   0
Shushil Bohara
  • 5,556
  • 2
  • 15
  • 32
1
CREATE TABLE #TABLE1
    ([ID] INT, [DEPT] VARCHAR(4), [LOCATION] VARCHAR(7))
;

INSERT INTO #TABLE1
    ([ID], [DEPT], [LOCATION])
VALUES
    (1, 'EEE', 'CHENNAI'),
    (2, 'ECE', 'CHENNAI'),
    (3, 'EEE', 'CHENNAI'),
    (4, 'ECE', 'CHENNAI'),
    (5, 'EEE', 'CBE'),
    (6, 'ECE', 'TRICHY'),
    (7, 'MECH', 'MADURAI')
;


SELECT [LOCATION], COUNT(CASE WHEN DEPT = 'EEE' THEN [DEPT] END ) EEE ,
COUNT(CASE WHEN DEPT = 'ECE' THEN DEPT END )  ECE
,COUNT(CASE WHEN DEPT = 'MECH' THEN DEPT END ) MECH FROM #TABLE1
GROUP BY [LOCATION]

output

LOCATION    EEE ECE MECH
CBE          1   0   0
CHENNAI      2   2   0
MADURAI      0   0   1
TRICHY       0   1   0
Chanukya
  • 5,833
  • 1
  • 22
  • 36