分组汇总

snlixing 2018-06-20 04:17:08
产 品 规格 规格单位 数 量
A 1/4 inch 100
B 6 mm 50
C 4 mm 50
D #12 60

怎么统一单位换算成mm进行汇总,1/4 inch 换算成mm就是用25.4*1/4 =6 mm

得到表格

规格 规格单位 数量
6 mm 150
4 mm 50
#12 60
...全文
193 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 版主 2018-06-20
  • 打赏
  • 举报
回复
--测试数据
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.规格单位;


听雨停了 2018-06-20
  • 打赏
  • 举报
回复
把DATENAME(weekday, [date]) AS dt 改成
cast(day([date]) AS VARCHAR(20)) AS dt
qq_34681482 2018-06-20
  • 打赏
  • 举报
回复
@听雨停了,大神,你之前写的行转列能不能再帮忙改动一下
qq_34681482 2018-06-20
  • 打赏
  • 举报
回复
@听雨停了,大神,你之前写的行转列能不能再帮忙改动一下
qq_34681482 2018-06-20
  • 打赏
  • 举报
回复
@听雨停了,大神,你之前写的行转列能不能再帮忙改动一下
听雨停了 2018-06-20
  • 打赏
  • 举报
回复

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

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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