基表和数据表数据统计[有关问题点数:100分]

基表和数据表数据统计[问题点数:100分]数据表(a_WeightTab)c_TypeNo(varchar(6)) c_MachineId(varchar(6))

基表和数据表数据统计[问题点数:100分]
数据表(a_WeightTab)
c_TypeNo(varchar(6)) c_MachineId(varchar(6)) c_Weight(float) c_date(datetime)
  01 02 25.31 2012-07-13 17:39:27
  01 02 24.98 2012-07-13 17:38:27  
  02 07 27.09 2012-07-13 17:31:27  
  02 07 27.98 2012-07-13 17:31:27  
  ... ... .... ......

基表(a_TyretypeTab)
c_TypeNo(varchar(6)) c_TypeName c_Tyre c_StandWeight c_UpWeight c_DoWeight
  01 aaaaa nx01 25.00 25.50 24.50
  02 bbbbb nxo2 27.99 28.49 27.49
  03 ccccc nx03 20.50 21.00 20.00

用c_TypeNo关联查询,得到
c_MachineId c_TypeNo c_TypeName c_Tyre c_StandWeight 总合计 合格数 超上限数 低下限数  

请各位给个主意

QQ:41278515

[解决办法]
是下面这个样子吗?不是应该也差不多,你自己改下吧

SQL code
--> 测试数据:[a_WeightTab]IF OBJECT_ID('[a_WeightTab]') IS NOT NULL DROP TABLE [a_WeightTab]GOCREATE TABLE [a_WeightTab]([c_TypeNo] VARCHAR(2),[c_MachineId] VARCHAR(2),[c_Weight] NUMERIC(4,2),[c_date] DATETIME)INSERT [a_WeightTab]SELECT '01','02',25.31,'2012-07-13 17:39:27' UNION ALLSELECT '01','02',24.98,'2012-07-13 17:38:27' UNION ALLSELECT '02','07',27.09,'2012-07-13 17:31:27' UNION ALLSELECT '02','07',27.98,'2012-07-13 17:31:27'GO--> 测试数据:[a_TyretypeTab]IF OBJECT_ID('[a_TyretypeTab]') IS NOT NULL DROP TABLE [a_TyretypeTab]GOCREATE TABLE [a_TyretypeTab]([c_TypeNo] VARCHAR(2),[c_TypeName] VARCHAR(5),[c_Tyre] VARCHAR(4),[c_StandWeight] NUMERIC(4,2),[c_UpWeight] NUMERIC(4,2),[c_DoWeight] NUMERIC(4,2))INSERT [a_TyretypeTab]SELECT '01','aaaaa','nx01',25.00,25.50,24.50 UNION ALLSELECT '02','bbbbb','nxo2',27.99,28.49,27.49 UNION ALLSELECT '03','ccccc','nx03',20.50,21.00,20.00GO--> 测试语句:SELECT  w.[c_TypeNo],w.[c_MachineId],t.[c_Tyre],t.[c_StandWeight],总合计=count(*),合格数=sum(case when w.[c_Weight]=t.[c_StandWeight] then 1 else 0 end),超上限数=sum(case when w.[c_Weight]<t.[c_UpWeight] then 1 else 0 end),低下限数=sum(case when w.[c_Weight]>t.[c_DoWeight] then 1 else 0 end)FROM [a_WeightTab] w, [a_TyretypeTab] t where w.[c_TypeNo]=t.[c_TypeNo]group by w.[c_TypeNo],w.[c_MachineId],t.[c_Tyre],t.[c_StandWeight]/*c_TypeNo c_MachineId c_Tyre c_StandWeight                           总合计         合格数         超上限数        低下限数-------- ----------- ------ --------------------------------------- ----------- ----------- ----------- -----------01       02          nx01   25.00                                   2           0           2           202       07          nxo2   27.99                                   2           0           2           1(2 行受影响)*/
[解决办法]
SQL code
IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'a_WeightTab')BEGIN    DROP TABLE a_WeightTabENDGOCREATE TABLE a_WeightTab(    c_TypeNo varchar(6),    c_MachineId varchar(6),    c_Weight float,    c_date datetime)GOINSERT INTO a_WeightTabSELECT '01', '02', 25.31, '2012-07-13 17:39:27' UNIONSELECT '01', '02', 24.98, '2012-07-13 17:38:27' UNIONSELECT '02', '07', 27.09, '2012-07-13 17:31:27' UNION  SELECT '02', '07', 27.98, '2012-07-13 17:31:27'GOIF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE name = 'a_TyretypeTab')BEGIN    DROP TABLE a_TyretypeTabENDGOCREATE TABLE a_TyretypeTab(    c_TypeNo varchar(6),    c_TypeName VARCHAR(100),    c_Tyre VARCHAR(100),    c_StandWeight float,    c_UpWeight float,    c_DoWeight float)GOINSERT INTO a_TyretypeTabSELECT '01', 'aaaaa', 'nx01', 25.00, 25.50, 24.50 UNIONSELECT '02', 'bbbbb', 'nxo2', 27.99, 28.49, 27.49 UNIONSELECT '03', 'ccccc', 'nx03', 20.50 ,21.00, 20.00GOSELECT    c_MachineId,         A.c_TypeNo,         c_TypeName,         c_Tyre,         c_StandWeight,         COUNT(1) AS 总合计,         SUM(CASE WHEN c_Weight BETWEEN c_DoWeight AND c_UpWeight THEN 1                 ELSE 0 END) AS 合格数,         SUM(CASE WHEN c_Weight > c_UpWeight THEN 1                 ELSE 0 END) AS 超上限数,         SUM(CASE WHEN c_Weight < c_DoWeight THEN 1                 ELSE 0 END) AS 低下限数FROM a_WeightTab AS A INNER JOIN a_TyretypeTab AS B ON A.c_TypeNo = B.c_TypeNoGROUP BY c_MachineId, A.c_TypeNo, c_TypeName, c_Tyre, c_StandWeight/*c_MachineId    c_TypeNo    c_TypeName    c_Tyre    c_StandWeight    总合计    合格数    超上限数    低下限数02    01    aaaaa    nx01    25    2    2    0    007    02    bbbbb    nxo2    27.99    2    1    0    1*/