SQL语句求表字段拆分

etonchan 2018-08-21 05:45:42
有个AA表如下,想把哪里的品名,按销售额平均值拆分,把表字段拆分,求解帮忙
AA表内容如下:
单号 品名 销售额
1 A 100
2 A,B 300
3 B,C,D 400
4 A,B,D 500
拆分的内容如下:
品名 销售额
A 100
A 150
B 150
B 133.33
C 133.33
D 133.33
A 166.67
B 166.67
D 166.67
...全文
218 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-08-22
  • 打赏
  • 举报
回复
引用 3 楼 etonchan 的回复:
能否只按逗号分割啊,因为有些品名中间有空格的,如‘EE CC,B,D’

#1 的代码就是只按逗号分割的
RINK_1 2018-08-21
  • 打赏
  • 举报
回复

select SINGLE_CHAR,cast(round((销售额*1.0)/QTY,2) as decimal(12,2))
from
(select A.*,LEN(品名)-LEN(REPLACE(品名,',',''))+1 AS QTY,
SUBSTRING(品名,number,CHARINDEX(',',品名+',',number)-number) AS SINGLE_CHAR
from table A
join master.dbo.spt_values B on CHARINDEX(',',','+A.品名,B.number)=B.number
where type='p' ) as A
etonchan 2018-08-21
  • 打赏
  • 举报
回复
能否只按逗号分割啊,因为有些品名中间有空格的,如‘EE CC,B,D’
吉普赛的歌 2018-08-21
  • 打赏
  • 举报
回复
吉普赛的歌 2018-08-21
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('AA') IS NOT NULL DROP TABLE AA
GO
CREATE TABLE AA(
单号 INT,
品名 VARCHAR(20),
销售额 INT
)
GO
INSERT INTO AA
SELECT 1,'A',100
UNION ALL SELECT 2,'A,B',300
UNION ALL SELECT 3,'B,C,D',400
UNION ALL SELECT 4,'A,B,D',500
GO
--------- 以上为测试表及测试数据 -----------

--1. 增加 字符串分割 表值函数
IF OBJECT_ID('[dbo].[Fun_String2ToStringArray]') IS NOT NULL
DROP FUNCTION [dbo].[Fun_String2ToStringArray]
GO
CREATE FUNCTION [dbo].[Fun_String2ToStringArray](@str NVARCHAR(MAX), @split NVARCHAR(10))
RETURNS @table TABLE ([item] NVARCHAR(max))
AS
BEGIN
IF LEN(@split) = 0
BEGIN
SET @split = N','
END

DECLARE @xml XML;
SET @xml = CONVERT(XML, '<x><![CDATA[' + replace(CONVERT(VARCHAR(MAX), @str), @split, ']]></x><x><![CDATA[') + ']]></x>')

INSERT INTO @table
SELECT item
FROM (SELECT c.value('text()[1]', 'nvarchar(4000)') [item]
FROM @xml.nodes('/x') t(c)) t
WHERE item IS NOT NULL

RETURN
END
GO
--2. 查询
SELECT fs.item AS [品名]
,CAST( (AA.销售额*1.0)/(SELECT COUNT(1) FROM [dbo].[Fun_String2ToStringArray](AA.[品名],',')) AS DECIMAL(10,2)) AS [销售额]
FROM AA CROSS APPLY [dbo].[Fun_String2ToStringArray](AA.[品名],',') AS fs

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧