Oracle合并多行
很多时候都在用这个,而没记录一下,存起来吧,非常好用,不用自己写了
WMSYS.WM_CONCAT
附上SQLSERVER的
SELECT DC.DIST_ID,DDP.CLIENT_ID,DDP.BILL_DATE,DDP.PROD_CODE,DDP.PROD_UNIT,DDP.PROD_QUANTITY,DPM.TARGET_PROD_CODE,DPM.TARGET_UNIT_ID,DPM.TARGET_PROD_UNIT
FROM DMS_DATA_PURCHASE DDP
INNER JOIN DMS_PROD_MAPPING DPM
ON DDP.CLIENT_ID = DPM.CLIENT_ID
AND DDP.PROD_CODE = DPM.DIST_PROD_CODE
AND DDP.PROD_UNIT = DPM.DIST_PROD_UNIT
AND DDP.DELETE_TIME IS NOT NULL
--AND (DDP.CLIENT_ID = 393 OR DDP.CLIENT_ID = 394)
AND DDP.BILL_DATE BETWEEN '2011-03-01' AND '2011-03-31 23:59:59'
INNER JOIN DMS_CLIENT DC
ON DC.CLIENT_ID = DDP.CLIENT_ID
AND DC.DIST_ID = 456
ORDER BY DC.DIST_ID, DDP.BILL_DATE DESC
SELECT TOP 10 *
FROM DMS_DATA_PURCHASE DDP
WHERE DDP.DELETE_TIME IS NOT NULL
SELECT *
FROM DMS_PROD_MAPPING DPM
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
select id, [values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')), 1, 1, '')
from tb
group by id
--1. 创建处理函数
CREATE FUNCTION dbo.F_WM_CONCAT(@id int)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @str varchar(8000)
SET @str = ''
SELECT @str = @str + ',' + value FROM tb WHERE id=@id
RETURN STUFF(@str, 1, 1, '')
END
GO
-- 调用函数
SELECt id, value = dbo.F_WM_CONCAT(id) FROM tb GROUP BY id
drop table tb
drop function dbo.F_WM_CONCAT
go