2013-04-26 86 views
3

我想利用分组值(柱:“临界”)合并从一个表dbo.VTM_duedate和下一计数值(柱:“DEVICE_NAME”)在另一个表DBO .TPM_scan基于分组值。SQL agregate值在一个表中,并与数从另一个表

表1

USE tempdb; 
GO 

IF OBJECT_ID('dbo.VTM_duedate') IS NOT NULL 
DROP TABLE dbo.VTM_duedate; 
GO 

CREATE TABLE dbo.VTM_duedate 
(
Criticality varchar(30) NOT NULL, 
KB  varchar(10) NOT NULL 
); 

INSERT INTO dbo.VTM_duedate(Criticality, KB) 
VALUES('Medium', 157848); 
INSERT INTO dbo.VTM_duedate(Criticality, KB) 
VALUES('High', 155439); 
INSERT INTO dbo.VTM_duedate(Criticality, KB) 
VALUES('High', 635533); 
INSERT INTO dbo.VTM_duedate(Criticality, KB) 
VALUES('Critical', 189164); 
INSERT INTO dbo.VTM_duedate(Criticality, KB) 
VALUES('High', 188641); 
INSERT INTO dbo.VTM_duedate(Criticality, KB) 
VALUES('Critical', 537990); 
INSERT INTO dbo.VTM_duedate(Criticality, KB) 
VALUES('Critical', 1349605); 
INSERT INTO dbo.VTM_duedate(Criticality, KB) 
VALUES('Critical', 5646789); 
INSERT INTO dbo.VTM_duedate(Criticality, KB) 
VALUES('Medium', 6545789); 
INSERT INTO dbo.VTM_duedate(Criticality, KB) 
VALUES('High', 5637965); 
INSERT INTO dbo.VTM_duedate(Criticality, KB) 
VALUES('Medium', 6464367) ; 
INSERT INTO dbo.VTM_duedate(Criticality, KB) 
VALUES('Medium', 1323123) ; 
INSERT INTO dbo.VTM_duedate(Criticality, KB) 
VALUES('Medium', 1004326) ; 
GO 

表2

USE tempdb; 
GO 

IF OBJECT_ID('dbo.TPM_scan') IS NOT NULL 
DROP TABLE dbo.TPM_scan; 
GO 

CREATE TABLE dbo.TPM_scan 
(
DEVICE_NAME varchar(30) NOT NULL, 
APP_ID  varchar(10) NOT NULL, 
Criticality varchar(10) NOT NULL 
); 

INSERT INTO dbo.TPM_scan(DEVICE_NAME, APP_ID, Criticality) 
VALUES('LDNSQLF700', 157848, 'Medium'); 
INSERT INTO dbo.TPM_scan(DEVICE_NAME, APP_ID, Criticality) 
VALUES('LDNSQLF700', 155439, 'High'); 
INSERT INTO dbo.TPM_scan(DEVICE_NAME, APP_ID, Criticality) 
VALUES('LDNSQLF700', 635533, 'High'); 
INSERT INTO dbo.TPM_scan(DEVICE_NAME, APP_ID, Criticality) 
VALUES('NYSQL502', 189164, 'Critical'); 
INSERT INTO dbo.TPM_scan(DEVICE_NAME, APP_ID, Criticality) 
VALUES('NYSQL502', 188641, 'High'); 
INSERT INTO dbo.TPM_scan(DEVICE_NAME, APP_ID, Criticality) 
VALUES('AUSSQL140', 537990, 'High'); 
INSERT INTO dbo.TPM_scan(DEVICE_NAME, APP_ID, Criticality) 
VALUES('AUSSQL140', 1349605, 'Critical'); 
INSERT INTO dbo.TPM_scan(DEVICE_NAME, APP_ID, Criticality) 
VALUES('JAP543X2', 5646789, 'Medium'); 
INSERT INTO dbo.TPM_scan(DEVICE_NAME, APP_ID, Criticality) 
VALUES('EU456CLX', 6545789, 'Critical'); 
INSERT INTO dbo.TPM_scan(DEVICE_NAME, APP_ID, Criticality) 
VALUES('EUCTX654', 5637965, 'High'); 
INSERT INTO dbo.TPM_scan(DEVICE_NAME, APP_ID, Criticality) 
VALUES('EUCTX654', 6464367, 'Medium') ; 
INSERT INTO dbo.TPM_scan(DEVICE_NAME, APP_ID, Criticality) 
VALUES('EUCTX654', 1323123, 'High') ; 
INSERT INTO dbo.TPM_scan(DEVICE_NAME, APP_ID, Criticality) 
VALUES('EUCTX654', 1004326, 'Medium') ; 
GO 

预期结果:

Criticality Device_count 
Critical   3 
High    6 
Medium    4 
+2

提供了样本数据这样做回答这个问题对我们就轻松多了。感谢您的彻底和完整。 – 2013-04-26 13:03:39

回答

1

在派生表你应该只从dbo.VTM_duedate选择Criticalitys的不同列表加入到dbo.TPM_scan并获得您的计数!

select 
    s.Criticality, 
    count(*) as 'Device_Count' 
from 
    (select distinct Criticality from dbo.VTM_duedate) d 
    inner join dbo.TPM_scan s 
     on d.Criticality = s.Criticality 
group by 
    s.Criticality 
+0

太好了。这就是我需要的。谢谢@Derek。 – Mario 2013-04-26 13:34:55

1

当我在SQLFiddle中构建模式时,这似乎得到了答案。

SELECT COUNT(*) AS Device_Count, Criticality 
FROM TPM_scan 
GROUP BY criticality 

http://www.sqlfiddle.com/#!6/c5287/6

+0

我想为downvote解释一下吗? – Aushin 2013-04-26 13:28:06

+0

是的,这个也适用。我只需要从第一个表中获取基准,因为其中一些可能会在第二个表中丢失。谢谢@Aushin。 – Mario 2013-04-26 13:38:24

相关问题