我的数据库中有一个表
+------+------+----------+ | id | dept | location | +------+------+----------+ | 1 | eee | chennai | | 2 | ece | chennai | | 3 | eee | chennai | | 4 | ece | chennai | | 5 | eee | cbe | | 6 | ece | trichy | | 7 | mech | madurai | +------+------+----------+
我需要在转置其中一列时计算id的数量。谁能建议我该查询以获取以下结果
+---------+------+-----+------+ | location| eee | ece | mech | +---------+------+-----+------+ | chennai | 2 | 2 | 0 | | cbe | 1 | 0 | 0 | | trichy | 0 | 1 | 0 | | madurai | 0 | 0 | 1 | +---------+------+-----+------+
谢谢您的帮助
答案 0 :(得分: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
答案 1 :(得分: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]
输出
LOCATION EEE ECE MECH
CBE 1 0 0
CHENNAI 2 2 0
MADURAI 0 0 1
TRICHY 0 1 0
答案 2 :(得分:1)
尝试与SUM
一起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
输出
city eee ece mech
cbe 1 0 0
chennai 2 2 0
madurai 0 0 1
trichy 0 1 0