关于跨表查询。。在线等。!

xiaopeng987 2011-01-31 09:38:53
描述:各店的编号是在零售表里的c_com字段,而新会员是在客户表里,客户表里的客户编号(kh_client.c_clientcode)
对应零售表里的客户编号(ls_retail.c_retailcode)
注意:零售表里可能有N条一样的客户编号(每买个商品+一条记录,比如:镜片、镜架,这就是2条记录),但是客户表里确是一条。
我现在要做的是查询出一定时期内的新会员数量(客户表),而且这个数量要与店铺相对应(零售表)
大牛们,指点下。。。。

SELECT
(SELECT c_short FROM xt_company c WHERE c.c_comcode=c_com) AS 'shop', --显示出各个店铺
(SELECT COUNT(c_clientcode) FROM kh_client WHERE kh_client.c_clientcode=ls_retail.c_retailcode)--显示客户表里的新会员

FROM ls_retail --零售表
WHERE c_date BETWEEN '2011-1-17 00:00:00' AND '2011-1-23 23:59:59'
GROUP BY c_com, c_retailcode


店名 新会员
天然店 1
经三路店 1
经三路店 1
富景店 1
南阳路店 1
南阳路店 1
南阳路店 1
棉纺路店 1
棉纺路店 1
棉纺路店 1
上面这些是我目前查出来的数据,我想要的效果是:
店名 新会员
天然店 1
经三路店 2
富景店 1
南阳路店 3
棉纺路店 3
...全文
199 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
keepbeliving 2011-02-07
  • 打赏
  • 举报
回复
4楼的可以的。
wyx100 2011-02-06
  • 打赏
  • 举报
回复
SELECT c.c_short AS 'shop',COUNT(b.c_clientcode)
FROM ls_retail a ,xt_company c ,kh_client b
WHERE a.c_date BETWEEN '2011-1-17 00:00:00' AND '2011-1-23 23:59:59' and c.c_comcode=a.c_com and
b.c_clientcode=a.c_retailcode
GROUP BY c.c_short


gw6328 2011-01-31
  • 打赏
  • 举报
回复

在你查出来的效果上
select a.店名,count(1) as 新店数量 from (你查出的) a group by a.店名
kevin_long 2011-01-31
  • 打赏
  • 举报
回复
4 楼的应该可以
AcHerat 2011-01-31
  • 打赏
  • 举报
回复

select c.c_short as shop,count(b.c_clientcode)code
from ls_retail a left join kh_client b on b.c_clientcode = a.c_retailcode
left join xt_company c on c.c_comcode = a.c_com
where a.c_date between '2011-1-17 00:00:00' and '2011-1-23 23:59:59'
group by c.c_short
AcHerat 2011-01-31
  • 打赏
  • 举报
回复

select c.c_short as shop,count(*)code
from ls_retail a left join kh_client b on b.c_clientcode = a.c_retailcode
left join xt_company c on c.c_comcode = a.c_com
where a.c_date between '2011-1-17 00:00:00' and '2011-1-23 23:59:59'
group by c.c_short

--???
xuam 2011-01-31
  • 打赏
  • 举报
回复
SELECT c.c_short AS 'shop',COUNT(b.c_clientcode)
FROM ls_retail a ,xt_company c ,kh_client b
WHERE a.c_date BETWEEN '2011-1-17 00:00:00' AND '2011-1-23 23:59:59' and c.c_comcode=a.c_com and
b.c_clientcode=a.c_retailcode
GROUP BY c.c_short
xiaopeng987 2011-01-31
  • 打赏
  • 举报
回复
不明白?可以了啊 流程字段表我都讲明白了 结果我也画出来了啊
AcHerat 2011-01-31
  • 打赏
  • 举报
回复

--带点数据吧!感觉这段SQL太繁琐了。
xiaopeng987 2011-01-31
  • 打赏
  • 举报
回复
别沉。。。。
andylist 2011-01-31
  • 打赏
  • 举报
回复
最近耐性很差。
startomeyhuang 2011-01-31
  • 打赏
  • 举报
回复
其实你自己已经完成了80%的答案了。
Shawn 2011-01-31
  • 打赏
  • 举报
回复
;WITH xt_company AS
(
SELECT c_short = N'天然店', c_comcode = 1 UNION ALL
SELECT N'经三路店', 2
),
kh_client AS
(
SELECT c_clientcode = 1, [name] = N'张三' UNION ALL
SELECT 2, N'李四'
),
ls_retail AS
(
SELECT c_com = 1, c_retailcode = 1, c_date = '2011-1-17 00:00:00' UNION ALL
SELECT 1, 2, '2011-1-23 23:59:59' UNION ALL
SELECT 2, 2, '2011-1-23 23:58:58'
)
--#1. 按照你的思路,外面加个GROUP BY即可
/*
SELECT shop, cnt = SUM(cnt) FROM
(
SELECT
(SELECT c_short FROM xt_company c WHERE c.c_comcode=c_com) AS 'shop', --显示出各个店铺
cnt = (SELECT COUNT(c_clientcode) FROM kh_client WHERE kh_client.c_clientcode=ls_retail.c_retailcode)--显示客户表里的新会员

FROM ls_retail --零售表
WHERE c_date BETWEEN '2011-1-17 00:00:00' AND '2011-1-23 23:59:59'
) a
GROUP BY shop
*/
--#2(李四参加了两个店哦)
SELECT 店名 = c_short, 新会员数量 = COUNT(*) FROM
(
SELECT c_com, c_short, c_clientcode, [name] FROM ls_retail a
INNER JOIN kh_client b
ON a.c_retailcode = b.c_clientcode AND a.c_date BETWEEN '2011-1-17 00:00:00' AND '2011-1-23 23:59:59'
LEFT JOIN xt_company c
ON a.c_com = c.c_comcode
) t
GROUP BY c_short

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧