急,求助delphi SQL语句高手,搞定加50分!

来源:百度知道 编辑:UC知道 时间:2024/09/25 02:32:54
怎么在DBGrid里显示统计数据?
假设有一个会员资料查询功能的模块, 要查会员姓名,电话,积分等信息,并在DBGrid中显示出来。
其中姓名、电话等基本信息是存在CUST表里的,而CUST表里是没有积分字段的,只有通过对销售订单表SALE里的TOTAL字段统计得出,消费一元对应一分。
我是用sum(TOTAL)计算,但现在的问题是,销售订单有2种情况,其中字段Type为订单和退货单2种,查询时,如果Type=订单,就应该累加相应分数,如果Type=退货单,就要减去相应分数,这样的话SQL语句应该怎么写呢?

请高手指点,给一个解决思路和详细的语句行吗,小妹刚刚到公司实习很菜鸟,谢谢!

你的CUST表里应该有客户的ID吧?SALE表里也应该有吧,我假定叫CUSTID
SELECT A.会员姓名,A.电话,B.CUST_TOTAL
FROM
CUST A,
(SELECT SUM(CAST(CASE Type
WHEN '退货单' THEN '-'
WHEN '订单' THEN ''
END+TOTAL AS FLOAT)) AS CUST_TOTAL,CUSTID
FROM SALE GROUP BY CUSTID) B
WHERE A.CUSTID=B.CUSTID
如果你的TOTAL字段不是字符类型的就转换下:
SELECT A.会员姓名,A.电话,B.CUST_TOTAL
FROM
CUST A,
(SELECT SUM(CAST(CASE Type
WHEN '退货单' THEN '-'
WHEN '订单' THEN ''
END+CAST(TOTAL AS CHAR) AS FLOAT)) AS CUST_TOTAL,CUSTID
FROM SALE GROUP BY CUSTID) B
WHERE A.CUSTID=B.CUSTID
思路就是用CASE把你的TOTAL上如果Type=退货单就加上一个减号,然后将结果转换成FLOAT,其它就没什么好说的了

呵呵,,, 研究了一下,,没有想到太好的办法..

其实真该在cust表中加个积分字段的哦...

如果我做这样的功能,我就不会用dbgrid了,换用Stringgrid.

用两个sql,一个查cust, 保存到数组A中

另外一个查 sale : select sum(total),type,cusid from sale group by type,cusid
第二个sql的结果大致如下
<