遇到一个SQL问题,求高手解决 20分,无满意结帖,结帖人wolf1947]

发布时间:2017-1-19 2:17:45 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"遇到一个SQL问题,求高手解决 20分,无满意结帖,结帖人wolf1947]",主要涉及到遇到一个SQL问题,求高手解决 20分,无满意结帖,结帖人wolf1947]方面的内容,对于遇到一个SQL问题,求高手解决 20分,无满意结帖,结帖人wolf1947]感兴趣的同学可以参考一下。

如何把数据表,查成这种模式,前面的姓名,卡号,电话只能出现一次,不能重复      姓名   卡号     电话              消费项目    次数 张三    234    1333323         蜡水洗车     1                                             臭氧消毒      2                                              

select 姓名, 卡号, 电话, 消费项目 ,count('次数') 次数 from tb group by 姓名, 卡号, 电话, 消费项目

select case when 消费项目 = (select min(消费项目) from tb where 姓名 = t.姓名) then 姓名 else '' end 姓名,        case when 消费项目 = (select min(消费项目) from tb where 姓名 = t.姓名) then 卡号 else '' end 卡号,        case when 消费项目 = (select min(消费项目) from tb where 姓名 = t.姓名) then 电话 else '' end 电话,        消费项目, 次数 from tb t

use test go if object_id('test.dbo.tb') is not null drop table tb -- 创建数据表 create table tb ( 姓名 char(5), 卡号 int, 电话 char(9), 消费项目 char(9), 次数 int ) go --插入测试数据 insert into tb select '张三',234,'1333323','蜡水洗车',1 union all select  '张三',234,'1333323','臭氧消毒',2 union all select  '张三',234,'1333323','消毒',2 union all select '李四',237,'1553323','蜡水洗车',3 union all select  '李四',237,'1553323','臭氧消毒',2 go --代码实现 ;with t as(select idd=row_number()over(partition by 姓名 order by 次数),* from tb) select 姓名=case when idd=1 then rtrim(姓名) else '' end ,卡号=case when idd=1 then rtrim(卡号) else '' end ,电话=case when idd=1 then rtrim(电话) else '' end ,消费项目,次数 from t /*测试结果 姓名 卡号 电话 消费项目 次数 -------------------------------------- 李四 237 1553323 臭氧消毒  2 蜡水洗车  3 张三 234 1333323 蜡水洗车  1 臭氧消毒  2 消毒      2 (5 行受影响) */

我靠 20分的帖子都抢的这么猛!~~

好生猛哦

该回复于2010-09-29 11:02:25被版主删除

学习了......

学习了......

学习了......

确实学习 。。。

引用 3 楼 happycell188 的回复:SQL code use test go if object_id('test.dbo.tb') is not null drop table tb -- 创建数据表 create table tb ( 姓名 char(5), 卡号 int, 电话 char(9), 消费项目 char(9), 次数 int ) go --插入测试数据 insert into tb s…… 学习!!

引用 4 楼 ws_hgo 的回复:我靠 20分的帖子都抢的这么猛!~~  亮点 3楼的方法好

引用 3 楼 happycell188 的回复:SQL code use test go if object_id('test.dbo.tb') is not null drop table tb -- 创建数据表 create table tb ( 姓名 char(5), 卡号 int, 电话 char(9), 消费项目 char(9), 次数 int ) go --插入测试数据 insert into tb s…… 学习了

select 姓名,卡号,电话,消费项目, 次数 from ( select  姓名 as 姓名1, case when 次数 = (select min(次数) from tb where 姓名 = t.姓名) then 姓名 else '' end 姓名,           case when 次数 = (select min(次数) from tb where 姓名 = t.姓名) then 卡号 else '' end 卡号,           case when 次数 = (select min(次数) from tb where 姓名 = t.姓名) then 电话 else '' end 电话,          消费项目, 次数  from tb t  ) A order by 姓名1 desc ,次数

学习 。。。

这。。。。。。。。。。。

--2000,2005通过  -- 创建数据表   create table tb   (   姓名 char(5),   卡号 int,   电话 char(9),   消费项目 char(9),   次数 int   )   go   --插入测试数据   insert into tb select '张三',234,'1333323','蜡水洗车',1   union all select  '张三',234,'1333323','臭氧消毒',2   union all select  '张三',234,'1333323','消毒',2   union all select '李四',237,'1553323','蜡水洗车',3   union all select  '李四',237,'1553323','臭氧消毒',2   go   --代码实现  select case when level=1 then 姓名 else '' end 姓名,         case when level=1 then ltrim(卡号) else '' end 卡号,        case when level=1 then ltrim(电话) else '' end 电话,    消费项目,次数    from        (select *,姓名 姓名1,level=(select count(*) from tb a where  a.姓名=tb.姓名 and a.消费项目<=tb.消费项目) from tb) t      order by 姓名1 desc,level asc GO 姓名    卡号           电话        消费项目      次数 ----- ------------ --------- --------- ----------- 张三    234          1333323   臭氧消毒      2                              蜡水洗车      1                              消毒        2 李四    237          1553323   臭氧消毒      2                              蜡水洗车      3 (5 行受影响)

上一篇:Microsoft Visio 2010 高级版能够直接生成sql2008的数据库表结构吗? 20分,无满意结帖,结帖人qianglai_xie]
下一篇:sql server 2008 中cdc功能 100zhaojianmi1]

相关文章

相关评论