分类统计的查询怎么做(ACCESS!)(100分)

  • 主题发起人 主题发起人 computer751122
  • 开始时间 开始时间
C

computer751122

Unregistered / Unconfirmed
GUEST, unregistred user!
我最近在搞一个医务室的程序,有一个报表做不出来,它的要求是要统计出每种药员工用了多少,客人用了多少!(只有这两类人!)不知道要怎么做这样的查询,请高手指点.本帖一百分,做出来了另外还有帖子加一百分!
 
你这么说太简单了,把你的表结构贴出来 。我想至少应该有人员表(表中含有类别区分是员工还是客人。)、用药表。

select .....from 用药表,人员表
where 用药表.人员=人员表.人员
group by 人员类别、药品
 
能说的再详细一些,有几个表。什么属性呵呵
 
就是.原始表要给出
 
其实就是一张用药表,表的结构如下
F_ID:编号
E_ID:工号或房号;
E_NAME:姓名;
E_SEX:性别
E_TF:是否员工
YP_ID:药品编号;
YP_NAME:药名;
YP_UNIT_PRICE:单价;
YP_QUANTITY:数量;
YP_TF:是否自费;
RE_DATE:开方时间;
现在就是要在这张表中统计出一个时间段内每个YP_NAME的总YP_QUANTITY,和总YP_UNIT_PRICE*YP_QUANTITY,而且要分类为E_TF为TRUE或FALSE,也就是要做成:
YP_NAME E_TF=TRUE E_TF=FALSE:
朴感敏 11 0
三精口服液 2 13
.....
分类而且要统计.在ACCESS中实现!
 
关键是比如一种药,可能员工没有用,或者客人没有用,但另一方有用,而ACCESS只支持左外或右外连接,不支持外连接,要怎么把RASA兄所得表的下半截拉到上半截的右边并对齐,形成一个双倍列数的表!
 
ACCESS我没有使用过,不过大致明白了你的意思,旧SQL SERVER的语法简单写写吧;
select YP_ID,YP_NAME,Sum(Case when IsNull(E_TF,'')=y then 数量 end) as 员工使用,
Sum(Case when IsNull(E_TF,'')=N then 数量 end) as 客人使用
from 用药表
group by YP_ID,YP_NAME
这样就按照药品查处给类使用情况,不过ACCESS下的语法是否支持,不确定了,应该可以的吧;
 
EN EP EQ ET GN GP GQ GT
双黄莲口服液 ¥7.60 1 ¥7.60 双黄莲口服液 ¥7.60 0 ¥0.00
泰诺感冒片 ¥8.80 1 ¥8.80 泰诺感冒片 ¥8.80 0 ¥0.00
速效伤风胶嚢 ¥0.60 1 ¥0.60 速效伤风胶嚢 ¥0.60 0 ¥0.00
速效伤风胶囊 ¥0.60 0 ¥0.00 速效伤风胶囊 ¥0.60 1 ¥0.60
维C银翘片 ¥1.70 1 ¥1.70 维C银翘片 ¥1.70 0 ¥0.00
to RASA:两排"速效伤风胶囊如何变成一行?
 
如果你是按照group by YP_ID,YP_NAME 的话绝对不可能出现上面的两条的。
除非有两个药品名称都是:速效伤风胶嚢
 
先建一个视图,从视图中查询
 
SELECT YP_Name as EN,YP_Unit_Price as EP,SUM(IIF(Employee_TF="true",YP_Quantity,0)) as EQ,SUM(IIF(Employee_TF="True",YP_Quantity*YP_Unit_Price,0)) as ET,
YP_Name as GN,YP_Unit_Price as GP,SUM(IIF(Employee_TF="false",YP_Quantity,0)) as GQ,SUM(IIF(Employee_TF="False",YP_Quantity*YP_Unit_Price,0)) as GT
FROM formulary
Group by YP_Name,YP_Unit_Price,YP_ID
order by YP_ID
我就是这样做的,完了就出现上面的结果!
 
我写的是按照group by YP_ID,YP_NAME
没有价格,同一个药品不同价格淡然是两条记录了?

如果你要显示价格,那么价格不要放在SQL语句中查询出来,利用计算字段;
 
现在搞清楚了,原来客人的那个速效伤风胶囊是我直接在ACCESS表中加入的!所以可能和用程序加入的字符上有区别,于是就被分成了两组!OK!谢谢大家,散分了!!:)
 
后退
顶部