34,576
社区成员
发帖
与我相关
我的任务
分享
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([产品] nvarchar(21),[规格] nvarchar(23),[规格单位] nvarchar(24),[数量] int)
Insert #T
select N'A',N'1/4',N'inch',100 union all
select N'B',N'6',N'mm',50 union all
select N'C',N'4',N'mm',50 union all
select N'D',N'#12',NULL,60
Go
--测试数据结束
SELECT 规格 ,
t.规格单位 ,
SUM(数量) AS 数量
FROM ( SELECT CASE WHEN 规格单位 = 'inch'
THEN RTRIM(24 * LEFT(规格, CHARINDEX('/', 规格) - 1)
/ RIGHT(规格, LEN(规格) - CHARINDEX('/', 规格)))
ELSE RTRIM(规格)
END AS 规格 ,
CASE WHEN 规格单位 = 'inch' THEN 'mm'
ELSE 规格单位
END AS 规格单位 ,
数量
FROM #T
) t
GROUP BY 规格 ,
t.规格单位;
use Tempdb
go
--> --> 听雨停了-->生成测试数据
if not object_id(N'Tempdb..#tab') is null
drop table #tab
Go
Create table #tab([产品] nvarchar(21),[规格] nvarchar(23),[规格单位] nvarchar(24),[数量] int)
Insert #tab
select N'A',N'1/4',N'inch',100 union all
select N'B',N'6',N'mm',50 union all
select N'C',N'4',N'mm',50 union all
select N'D',N'#12',NULL,50
GO
--测试数据结束
;WITH cte AS (
SELECT CASE ISNULL(规格单位,'') when 'inch' then 'mm' else 规格单位 end AS 规格单位,
数量,
CASE ISNULL(规格单位,'') when 'inch' then
cast(CAST(
LEFT([规格], CAST(CHARINDEX('/', [规格]) AS INT) -1) AS
FLOAT
)/
CAST(
SUBSTRING([规格], CAST(CHARINDEX('/', [规格]) AS INT) + 1, 10)
AS FLOAT
) * 24 AS VARCHAR(20)) --这里应该是*24,按照你给的*25.4的话,结果是6.35,不是6
ELSE 规格 end
AS [规格]
FROM #tab
)
SELECT 规格,规格单位,sum(数量) as 数量
FROM cte
GROUP BY 规格单位,规格
规格 规格单位 数量
----------------------- ------------------------ -----------
#12 NULL 50
4 mm 50
6 mm 150
1/4 inch 换算成mm就是用25.4*1/4 =6 mm,这里应该是24*1/4吧,25.4*1/4结果是6.35,不是6