原始:
货单号 商品名 类型ID 价格
121 商品一 101 10
121 商品一 103 10
122 商品二 101 10
122 商品二 103 10
"问题:想确保数据唯一性,比如说货单号、商品名、价格一样,
但是类型不一样,不过我只想显示一行数据的SQL,不管类型ID" 求SQL语句
希望结果:
货单号 商品名 类型ID 价格
121 商品一 101或103 10
122 商品二 101或103 10
该结构为套用,设计不合理吾喷
------解决方案--------------------
- SQL code
有表tb, 如下:id value1 aa1 bb2 aaa2 bbb2 ccc需要得到结果:id values1 aa,bb2 aaa,bbb,ccc即,group by id, 求value 的和(字符串相加)1. 旧的解决方法-- 1. 创建处理函数CREATE FUNCTION dbo.f_str(@id int)RETURNS varchar(8000)ASBEGIN DECLARE @r varchar(8000) SET @r = '' SELECT @r = @r + ',' + value FROM tb WHERE [email protected] RETURN STUFF(@r, 1, 1, '')ENDGO-- 调用函数SELECt id, values=dbo.f_str(id) FROM tb GROUP BY id-- 2. 新的解决方法-- 示例数据DECLARE @t TABLE(id int, value varchar(10))INSERT @t SELECT 1, 'aa'UNION ALL SELECT 1, 'bb'UNION ALL SELECT 2, 'aaa'UNION ALL SELECT 2, 'bbb'UNION ALL SELECT 2, 'ccc'-- 查询处理SELECT *FROM (SELECT DISTINCT Id FROM @t)AOUTER APPLY( SELECT [values]= STUFF(REPLACE(REPLACE( ( SELECT value FROM @t N WHERE id = A.id FOR XML AUTO ), '<N value="', ','), '"/>', ''), 1, 1, ''))N/*--结果id values----------- ----------------1 aa,bb2 aaa,bbb,ccc(2 行受影响)--*/
------解决方案--------------------
select distinct id,value2 from tbl
------解决方案--------------------