佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1351|回复: 4

SQL 问题

[复制链接]
发表于 5-10-2007 02:39 PM | 显示全部楼层 |阅读模式
我有个table 叫 salessummary,是拿来记录每个顾客在每个月的购买数额。
以下是这个table的field -

bonusmonth -记录月份和年份
customerid - 顾客编号
rank - 顾客等级
sales - 购买数额

我要summary by sales,例如这个月购买数额少过300的有几位顾客,
在$300 到$400 之间的有几位顾客,等等。
请问要如何用SQL select 一个像以下的result?

bnsmonth   rank  description  total
01/2007    1      < 300         10
01/2007    1      300 - 400      5
01/2007    1      400 - 500     17
01/2007    1      500 - 600      3
01/2007    2      < 300        220
01/2007    2      300 - 400     17
01/2007    2      400 - 500     17
01/2007    2      500 - 600     41
回复

使用道具 举报


ADVERTISEMENT

发表于 5-10-2007 02:47 PM | 显示全部楼层

回复 #1 chewkit 的帖子

1.例如这个月购买数额少过300的有几位顾客

SELECT COUNT(customerid) FROM salessummary WHERE sales<300

2.在$300 到$400 之间的有几位顾客

SELECT COUNT(customerid) FROM salessummary WHERE sales BETWEEN 300 AND 400

我不是很清楚你要的是不是这个。。。希望可以帮到你~
回复

使用道具 举报

 楼主| 发表于 5-10-2007 04:11 PM | 显示全部楼层
原帖由 pipiLee 于 5-10-2007 02:47 PM 发表
1.例如这个月购买数额少过300的有几位顾客

SELECT COUNT(customerid) FROM salessummary WHERE sales


是,就是这个。
但是,这个方法是不是要用很多sub query来完成?
回复

使用道具 举报

发表于 5-10-2007 05:13 PM | 显示全部楼层
原帖由 chewkit 于 5-10-2007 02:39 PM 发表

我有个table 叫 salessummary,是拿来记录每个顾客在每个月的购买数额。
以下是这个table的field -

bonusmonth -记录月份和年份
customerid - 顾客编号
rank - 顾客等级
sales - 购买数额

我要summary by sales,例如这个月购买数额少过300的有几位顾客,
在$300 到$400 之间的有几位顾客,等等。
请问要如何用SQL select 一个像以下的result?

bnsmonth   rank  description  total
01/2007    1      < 300         10
01/2007    1      300 - 400      5
01/2007    1      400 - 500     17
01/2007    1      500 - 600      3
01/2007    2      < 300        220
01/2007    2      300 - 400     17
01/2007    2      400 - 500     17
01/2007    2      500 - 600     41


先把description record 在一個table裏面
design 可以如下
RANGE_AMT
Code
MinAmt
MaxAmt
1
0
299
2
300
399
3
400
499


然後 create 下面這個function


  1. CREATE FUNCTION GetRange(@sales float)

  2. RETURNS NVARCHAR(20)  AS

  3. BEGIN



  4. DECLARE @AMT NVARCHAR(20)


  5. BEGIN

  6. SET @AMT = (SELECT (CAST(MINAMT AS NVARCHAR(10))+'-'+CAST(MAXAMT AS
  7. NVARCHAR(10))) FROM RANGE_AMT WHERE @SALES BETWEEN MINAMT AND MAXAMT)

  8. END


  9. RETURN @AMT

  10. END
复制代码


之後
SELECT A.BONUSMONTH,A.RANK,dbo.GetRange(SUM(A.SALES))AS DESCRIPTION,SUM(A.SALES)AS SALES,A.CUSTOMERID
FROM SALESSUMMARY A
GROUP BY A.BONUSMONTH,A.RANK,A.CUSTOMERID

之後再count CustomerID
應該是這樣吧


回复

使用道具 举报

 楼主| 发表于 5-10-2007 05:19 PM | 显示全部楼层
原帖由 kristy 于 5-10-2007 05:13 PM 发表


先把description record 在一個table裏面
design 可以如下
RANGE_AMT
Code
MinAmt
MaxAmt
1
0
299
2
300
399
3
400
499


然後 create 下面這個function


CREATE FUNCTION GetRang ...


让我试试先,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 21-9-2025 12:56 PM , Processed in 0.134978 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表