日期:2014-05-17  浏览次数:20617 次

不同的记录数量合并,相同的记录数量取其一 SQL语句怎么写
SELECT ML009,SUM(ML005) AS 超入数量 FROM INVML GROUP BY ML009
--如果ML009,ML005 相同那么 数量等于ML005任何一笔,如果ML009不同,那么数量等于SUM(ML005)

不同的记录数量合并,相同的记录数量取其一 ,我自己琢磨语句如下
SELECT A.ML009,SUM(超入数量) FROM 
(SELECT distinct ML009,超入数量 FROM XXX ) A GROUP BY A.ML009
还有没有更好的例子,大家推荐一下,谢谢.

------解决方案--------------------
if OBJECT_ID('INVML') is not null drop table INVML
create table INVML
(
ML009 int,
ML005 int
)
insert into INVML
select 22,24 union
select 50,50 union
select 50,50 union
select 10,22 union
select 20,20 union
select 22,23 union
select 22,24 union
select 21,24 union
select 30,21

SELECT ML009,SUM(ML005) AS 超入数量 FROM 
(
    select ML009,ML005 from INVML where ML009<>ML005 
    union all
    select distinct ML009,ML005 from INVML where ML009=ML005
) A  GROUP BY ML009

------解决方案--------------------
if OBJECT_ID('INVML') is not null drop table INVML
create table INVML
(
ML009 int,
ML005 int
)
insert into INVML
select 22,24 union
select 50,50 union
select 50,50 union
select 10,22 union
select 20,20 union
select 22,23 union
select 22,24 union
select 21,24 union
select 30,21

SELECT ML009,SUM(ML005) AS 超入数量 FROM 
(
    select ML009,ML005 from INVML where ML009<>ML005 
    union all
    select top 1 ML009,ML005 from INVML where ML009=ML005 order by NEWID() --随机一个
) A  GROUP BY ML009

------解决方案--------------------
IF EXISTS(select * from sysobjects where name ='INVML')
drop table INVML
GO
create table INVML 
(
ML009 int,
ML005 int
)
go
insert into INVML 
SELECT 10,10 union all
SELECT 10,11 union all
SELECT 20,20 union all
SELECT 20,21 union all
SELECT 30,30 union all
SELECT 30,31 
go

select * from INVML
--如果ML009,ML005 值相同那么 数量等于ML005任何一笔
SELECT ML005 from INVML where ML009=ML005
union all
--如果ML009,ML005 值不同那么,那么数量等于SUM(ML005)
select SUM(ML005) from INVML WHERE ML009<>ML005
------解决方案--------------------