两个表:
表一、设备类型DeviceClass
字段1:DeviceClassID INT 主键 自增
字段2:DeviceClassName NvarChar(50) 非空
表二、设备Devic
字段1:DeviceID INT 主键 自增
字段2:DeviceName NvarChar(50) 非空
字段3:DeviceClassID 非空
想要实现的功能:
按照设备类型,分别统计出表二中各种设备的数量,并用表一中的DeviceClassName作为别名。
注:表一中的设备类型数量未知。
偶是MsSql菜鸟一只,望详细点。
表一、设备类型DeviceClass
字段1:DeviceClassID INT 主键 自增
字段2:DeviceClassName NvarChar(50) 非空
表二、设备Devic
字段1:DeviceID INT 主键 自增
字段2:DeviceName NvarChar(50) 非空
字段3:DeviceClassID 非空
想要实现的功能:
按照设备类型,分别统计出表二中各种设备的数量,并用表一中的DeviceClassName作为别名。
注:表一中的设备类型数量未知。
偶是MsSql菜鸟一只,望详细点。
as
Select a.DeviceClassName,count(*) as 数量
from DeviceClass a inner join Devic b
on a.DeviceClassID=b.DeviceClassID
group by a.DeviceClassName
go
CREATE TABLE Devic(DeviceID INT,DeviceName NvarChar(50),DeviceClassID INT)
INSERT DeviceClass SELECT 1,'aa' UNION ALL SELECT 2,'bb' UNION ALL SELECT 3,'cc'
INSERT Devic SELECT 1,'xxx',1
UNION ALL SELECT 2,'yyy',1
UNION ALL SELECT 3,'yyy',1
UNION ALL SELECT 4,'yyy',2
DECLARE @s VARCHAR(8000)
SELECT @s=''
SELECT @s=@s+',['+DeviceClassName+']=MAX(CASE WHEN DeviceClassName=''' + DeviceClassName + ''' THEN CNT ELSE 0 END)'
FROM
(
SELECT DeviceClassName,ISNULL(Cnt,0) CNT
FROM DeviceClass a
LEFT JOIN
(SELECT DeviceClassID,COUNT(1) CNT FROM Devic GROUP BY DeviceClassID) b
ON a.DeviceClassID=b.DeviceClassid
) x
SELECT @s='SELECT ' + STUFF(@s,1,1,'') + ' FROM (
SELECT DeviceClassName,ISNULL(Cnt,0) CNT
FROM DeviceClass a
LEFT JOIN
(SELECT DeviceClassID,COUNT(1) CNT FROM Devic GROUP BY DeviceClassID) b
ON a.DeviceClassID=b.DeviceClassid
) x'
EXEC(@s)DROP TABLE DeviceClass,Devic
CREATE TABLE Devic(DeviceID INT,DeviceName NvarChar(50),DeviceClassID INT)
INSERT DeviceClass SELECT 1,'aa' UNION ALL SELECT 2,'bb' UNION ALL SELECT 3,'cc'
INSERT Devic SELECT 1,'xxx',1
UNION ALL SELECT 2,'yyy',1
UNION ALL SELECT 3,'yyy',1
UNION ALL SELECT 4,'yyy',2
SELECT DeviceClassName,ISNULL(Cnt,0) CNT
INTO tmp
FROM DeviceClass a
LEFT JOIN
(SELECT DeviceClassID,COUNT(1) CNT FROM Devic GROUP BY DeviceClassID) b
ON a.DeviceClassID=b.DeviceClassidDECLARE @s VARCHAR(8000)
SELECT @s=''
SELECT @s=@s+',['+DeviceClassName+']=MAX(CASE WHEN DeviceClassName=''' + DeviceClassName + ''' THEN CNT ELSE 0 END)'
FROM tmp
SELECT @s='SELECT ' + STUFF(@s,1,1,'') + ' FROM tmp'
EXEC(@s)DROP TABLE DeviceClass,Devic,tmp
as
Select DeviceClass.DeviceClassName,count(DeviceID) as '设备数量'
from DeviceClass inner join Devic
on DeviceClass.DeviceClassID=Devic.DeviceClassID
group by DeviceClass.DeviceClassName
go你测试一下阿