数量统计,统计一张表中各分类数据共有几条数据

zhiaiyahong 2014-07-30 02:14:21
--以下下是表,和添加的数据
CREATE TABLE 统计个数
(
名称 nvarchar(50) not null,
分类 int not null
)
INSERT INTO 统计个数
SELECT '默克',4
UNION all
SELECT '橘子',1
UNION all
SELECT '橘子',1
UNION all
SELECT '茄子',2
UNION all
SELECT '茄子',2
UNION all
SELECT '牛肉',3
UNION all
SELECT '牛肉',3

-----以下是我的查询方法

SELECT 名称,分类,数量 FROM
(SELECT MAX(R) 数量,MAX(rs) 行号 FROM (
SELECT *,ROW_NUMBER() OVER(PARTITION BY 名称 ORDER BY 名称) AS R,ROW_NUMBER() OVER(ORDER BY 名称) AS rs FROM 统计个数) AS M GROUP BY 名称) t1
left join
(SELECT *,ROW_NUMBER() OVER(PARTITION BY 名称 ORDER BY 名称) AS R,ROW_NUMBER() OVER(ORDER BY 名称) AS rs FROM 统计个数) t2
ON t1.行号=t2.rs
...全文
1165 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-07-30
  • 打赏
  • 举报
回复
不一样的期待结果有不一样的写法啊,你不知道你想要什么样子的,我随便写都说的过去拉
zhiaiyahong 2014-07-30
  • 打赏
  • 举报
回复
引用 15 楼 DBA_Huangzj 的回复:
根据你14楼的图的原始数据,期待结果是什么?
没啥期待结果,只是试了下加一个不一样的字段结果会怎样
發糞塗牆 2014-07-30
  • 打赏
  • 举报
回复
根据你14楼的图的原始数据,期待结果是什么?
zhiaiyahong 2014-07-30
  • 打赏
  • 举报
回复
引用 13 楼 DBA_Huangzj 的回复:
多给几条数据,貌似你的还是复杂了

数据我是一个一个加的。。。 劳烦自己家几条吧

刚才你说的那个语句 加一天不一样的字段就不行了
發糞塗牆 2014-07-30
  • 打赏
  • 举报
回复
多给几条数据,貌似你的还是复杂了
zhiaiyahong 2014-07-30
  • 打赏
  • 举报
回复
引用 9 楼 DBA_Huangzj 的回复:

SELECT 名称,分类,COUNT(1)[数量]
FROM 统计个数
GROUP BY 名称,分类
/*
名称 分类 数量
-------------------------------------------------- ----------- -----------
橘子 1 2
茄子 2 2
牛肉 3 2
默克 4 1

*/






这种结果呢


CREATE TABLE 商户账单表
(
订单唯一标识 UNIQUEIDENTIFIER NOT NULL,
商户 NVARCHAR(500) NOT NULL,
订单号 varchar(100) NOT NULL,
花费 MONEY NOT NULL,
日期 DATETIME NOT NULL,
购买人 NVARCHAR(500) NOT NULL,
送货地址 NVARCHAR(1000) NOT NULL
)
INSERT INTO 商户账单表 VALUES(NEWID(),'大众鞋垫','20140730006',969.06,GETDATE(),'龚先生','北京')

我的方法

SELECT CASE WHEN 数量=1 THEN 商户 ELSE '' END 商户,订单号,花费,购买人,送货地址,日期,订单唯一标识 FROM
(SELECT *,ROW_NUMBER() OVER(ORDER BY 商户) AS 行号 FROM 商户账单表) AS T1
LEFT JOIN
(SELECT MIN(R) AS 数量,MIN(行号) AS 行号 FROM
(SELECT 商户,ROW_NUMBER() OVER(PARTITION BY 商户 ORDER BY 商户) AS R,ROW_NUMBER() OVER(ORDER BY 商户) AS 行号 FROM 商户账单表) AS RT GROUP BY 商户) AS T2
ON T1.行号=T2.行号
zhiaiyahong 2014-07-30
  • 打赏
  • 举报
回复
引用 9 楼 DBA_Huangzj 的回复:

SELECT 名称,分类,COUNT(1)[数量]
FROM 统计个数
GROUP BY 名称,分类
/*
名称                                                 分类          数量
-------------------------------------------------- ----------- -----------
橘子                                                 1           2
茄子                                                 2           2
牛肉                                                 3           2
默克                                                 4           1

*/
如此简单。。。。看来我绕远了
發糞塗牆 2014-07-30
  • 打赏
  • 举报
回复
max() over不去重
發糞塗牆 2014-07-30
  • 打赏
  • 举报
回复

SELECT 名称,分类,COUNT(1)[数量]
FROM 统计个数
GROUP BY 名称,分类
/*
名称                                                 分类          数量
-------------------------------------------------- ----------- -----------
橘子                                                 1           2
茄子                                                 2           2
牛肉                                                 3           2
默克                                                 4           1

*/
zhiaiyahong 2014-07-30
  • 打赏
  • 举报
回复
引用 5 楼 fredrickhu 的回复:
你这个坎起来可以直接写MAX()OVER一样的
max() over?? 这个杂么用呢
zhiaiyahong 2014-07-30
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
你直接贴出期待结果吧。

结果已经查出来了,就是想问问有没有更好的办法
--小F-- 2014-07-30
  • 打赏
  • 举报
回复
你这个坎起来可以直接写MAX()OVER一样的
發糞塗牆 2014-07-30
  • 打赏
  • 举报
回复
你直接贴出期待结果吧。
發糞塗牆 2014-07-30
  • 打赏
  • 举报
回复
啥意思???
zhiaiyahong 2014-07-30
  • 打赏
  • 举报
回复
这样写,和逐个查那个效率高。或者有没有更好的方法?
zhiaiyahong 2014-07-30
  • 打赏
  • 举报
回复
这里是按名称来统计的,没有按分类来统计,结果都是一样的

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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