帮忙看下这个语句
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
客户 数量 金额 日期
-------------------- ----------- ----------- -----------------