我需要2个数据表来查询
中的数据Machine_ID Machine_name
101 Computer1
202 Computer2
303 Computer3
404 Computer4
第二张表:
Machine_ID Event_ID Event_date
101 1 03/15/2016
101 1 03/14/2016
101 2 03/15/2016
101 1 03/13/2016
102 1 03/15/2016
102 2 03/15/2016
102 1 03/14/2016
103 2 03/15/2016
103 2 03/14/2016
104 1 03/15/2016
我需要查询的输出在一行中并包含信息:
Machine_ID,
Machine_Name,
Count(Machine_ID) where Event_ID='1'
Count(Machine_ID) where Event_ID='2'
我已经尝试了很多方法来编写查询,但是对于正确的语法却不知所措。
这不起作用,但会让我知道我的目标:
Select M.Machine_ID, M.Machine_Name,
count(Machine_ID) where E.Event_ID='1' and Machine_ID='101',
count(Machine_ID) where E.Event_ID='2' and Machine_ID='101'
from Machines M
join Events E on M.Machine_ID = E.Machine_ID
基于给定数据的输出应为:
101 Computer1 3 1
答案 0 :(得分:0)
试试这个:
SELECT
M.Machine_ID,
M.Machine_Name,
COUNT(CASE WHEN E.Event_ID='1' THEN 1 ELSE NULL END) AS Event1,
COUNT(CASE WHEN E.Event_ID='2' THEN 1 ELSE NULL END) AS Event2
FROM Machines M
JOIN Events E
ON M.Machine_ID = E.Machine_ID
GROUP BY M.Machine_ID, M.Machine_Name
答案 1 :(得分:-1)
使用条件聚合:
SELECT
M.Machine_ID,
M.Machine_Name,
SUM(CASE WHEN E.Event_ID = '1' THEN 1 END) AS Event1_cnt,
SUM(CASE WHEN E.Event_ID = '2' THEN 1 END) AS Event2_cnt
FROM
Machines M
JOIN Events E
ON M.Machine_ID = E.Machine_ID
GROUP BY
M.Machine_ID, M.Machine_Name
如果您想将输出仅限制为一个机器ID(例如:101
),请在GROUP BY
之前添加以下行:
WHERE M.Machine_ID = '101'
此外,将ID
存储为字符串似乎是一个坏主意。考虑将数据类型更改为整数或类似内容。