首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

帮忙看下这个语句,该如何处理

2012-01-14 
帮忙看下这个语句selectright(客户,len(客户)-charindex( - ,客户))as客户,数量,金额FROM(selectdistinct

帮忙看下这个语句
select   right(客户,len(客户)-charindex( '- ',客户))as   客户,   数量,   金额
FROM
      (select   distinct   客户,null   as   数量,null   as   金额   from   表               union
select   客户+ '- '+商品+规格,sum(数量),sum(金额)   from   表   group   by   客户,商品,规格)T

表的格式是这样的:

客户     商品       规格     数量       金额       日期
张三     电脑       x32       10           100         2007-01-01
张三     电脑       x32       20           200         2007-01-03
李四     电脑       x32       10           100         2007-01-02
张三     手机                   10           200         2007-01-20

想要这样的结果:

客户           数量       金额       日期
张三                                       2007-01-20     (这里日期取同客户的最大日期)
电脑x32     30           300         2007-01-03     (这里日期取同商品同规格的最大日期)
手机           10           200         2007-01-20
李四
电脑x32     10           100         2007-01-02

但是用上面的语句运行之后没有规格的商品显示不出来.还有就是用这个语句如何取最大日期,就是要求的那样?



[解决办法]
人在网吧,没有测试环境,如果没有写对请间谅

SELECT 客户,数量,金额,日期
FROM
(
SELECT 商品+规格 AS 客户,SUM(数量) AS 数量,SUM(金额) AS 金额,max(日期) AS 日期,1 as flag
FROM 表 GROUP BY 客户,商品+规格,数量
UNION ALL
SELECT 客户,null,null,max(日期),0 as flag FROM 表 GROUP BY 客户
) A ORDER BY 客户,flag
[解决办法]
select 客户, 数量=NULL, 金额=NULL, 日期=max(日期)
from T
group by 客户
union all
select 商品=商品+isnull(规格, ' '), 数量=sum(数量), 金额=sum(金额), 日期=max(日期)
from T
group by 客户, 商品+isnull(规格, ' ')
[解决办法]
create table T(客户 varchar(10), 商品 varchar(10), 规格 varchar(10), 数量 int, 金额 int, 日期 datetime)
insert T select '张三 ', '电脑 ', 'x32 ', 10, 100, '2007-01-01 '
union all select '张三 ', '电脑 ', 'x32 ', 20, 200, '2007-01-03 '
union all select '李四 ', '电脑 ', 'x32 ', 10, 100, '2007-01-02 '
union all select '张三 ', '手机 ', NULL, 10, 200, '2007-01-20 '

select tmp.客户, tmp.数量, tmp.金额, tmp.日期
from
(
select 客户, 数量=NULL, 金额=NULL, 日期=max(日期), sort=客户
from T
group by 客户
union all
select 商品=商品+isnull(规格, ' '), 数量=sum(数量), 金额=sum(金额), 日期=max(日期), sort=客户
from T
group by 客户, 商品+isnull(规格, ' ')
)tmp
order by tmp.sort desc, tmp.数量

--result
客户 数量 金额 日期
-------------------- ----------- ----------- ------------------------------------------------------


张三 NULL NULL 2007-01-20 00:00:00.000
手机 10 200 2007-01-20 00:00:00.000
电脑x32 30 300 2007-01-03 00:00:00.000
李四 NULL NULL 2007-01-02 00:00:00.000
电脑x32 10 100 2007-01-02 00:00:00.000

(5 row(s) affected)
[解决办法]
create table 表(客户 varchar(100), 商品 varchar(100), 规格 varchar(100), 数量 int, 金额 int, 日期 datetime)
insert 表 select '张三 ', '电脑 ', 'x32 ', 10, 100, '2007-01-01 '
union all select '张三 ', '电脑 ', 'x32 ', 20, 200, '2007-01-03 '
union all select '李四 ', '电脑 ', 'x32 ', 10, 100, '2007-01-02 '
union all select '张三 ', '手机 ', ' ', 20, 200, '2007-01-20 '

select
right(客户,len(客户)-charindex( '- ',客户))as 客户, 数量, 金额,日期
from
(select distinct 客户,null as 数量,null as 金额,max(日期) as 日期,orderid=客户 from 表 group by 客户
union
select 客户+ '- '+商品+规格,sum(数量),sum(金额),max(日期),orderid=客户 from 表 group by 客户,商品,规格
)T
order by
orderid desc

drop table 表

/*
客户数量金额日期
---------------------------------------------
张三NULLNULL2007-01-20
电脑x32303002007-01-03
手机202002007-01-20
李四NULLNULL2007-01-02
电脑x32101002007-01-02
*/
[解决办法]
gc_ding(施主,给个妞泡好么) 如果空用 null 表示的话,前面的商品还是显示不出来,感谢!
-----------------------------------------------
这样改就行了:
create table 表(客户 varchar(100), 商品 varchar(100), 规格 varchar(100), 数量 int, 金额 int, 日期 datetime)
insert 表 select '张三 ', '电脑 ', 'x32 ', 10, 100, '2007-01-01 '
union all select '张三 ', '电脑 ', 'x32 ', 20, 200, '2007-01-03 '
union all select '李四 ', '电脑 ', 'x32 ', 10, 100, '2007-01-02 '
union all select '张三 ', '手机 ',NULL, 20, 200, '2007-01-20 '

select
right(客户,len(客户)-charindex( '- ',客户))as 客户, 数量, 金额,日期
from
(select distinct 客户,null as 数量,null as 金额,max(日期) as 日期,orderid=客户 from 表 group by 客户
union
select 客户+ '- '+isnull(商品, ' ')+isnull(规格, ' '),sum(数量),sum(金额),max(日期),orderid=客户 from 表 group by 客户,商品,规格
)T
order by
orderid desc

drop table 表

/*
客户数量金额日期
---------------------------------------------
张三NULLNULL2007-01-20
电脑x32303002007-01-03
手机202002007-01-20
李四NULLNULL2007-01-02
电脑x32101002007-01-02
*/

热点排行