我想实现下面计算的值 ,这个SQL 如何写呢?
1 2.88/0.32
2 3.99/2.88
3 6.39/3.99
1 9
2 1.38
3 1.60
下面是表结构和表数据,用于测试。
if exists (select * from sysobjects where id = OBJECT_ID('[GP_GPDMB_TMP9]') and OBJECTPROPERTY(id, 'IsUserTable') = 1)
DROP TABLE [GP_GPDMB_TMP9]
CREATE TABLE [GP_GPDMB_TMP9] (
[序号] [bigint] NULL,
[AA] [decimal] (18,2) NULL,
[BB] [decimal] (18,2) NULL,
[CC] [varchar] (50) NULL)
INSERT [GP_GPDMB_TMP9] ([序号],[AA],[BB],[CC]) VALUES ( 1,0.32,0.97,N'001')
INSERT [GP_GPDMB_TMP9] ([序号],[AA],[BB],[CC]) VALUES ( 2,2.88,2.41,N'002')
INSERT [GP_GPDMB_TMP9] ([序号],[AA],[BB],[CC]) VALUES ( 3,3.99,5.68,N'003')
INSERT [GP_GPDMB_TMP9] ([序号],[AA],[BB],[CC]) VALUES ( 4,6.39,8.35,N'004')
TechWhizKid参考GPT回答:
WITH CTE AS (
SELECT
[序号],
[AA],
LAG([AA]) OVER (ORDER BY [序号]) AS previous_AA
FROM
[GP_GPDMB_TMP9]
)
SELECT
[序号],
CASE
WHEN previous_AA = 0 THEN NULL -- 在前一个AA值为0的情况下,避免除以0的错误
ELSE [AA] / previous_AA
END AS result
FROM
CTE
ORDER BY
[序号]
使用窗口函数LAG()来获取每一行的前一行AA列的值。然后,查询计算AA列的值除以其前一行的值。如果前一行的值为0,查询将返回NULL,以避免除以零的错误。
1 9
2 1.38
3 1.60 这个是什么意思呢?
使用子查询和ORDER BY子句对查询结果进行排序:
SELECT num1/num2 AS result
FROM (
SELECT 2.88 AS num1, 0.32 AS num2
UNION
SELECT 3.99 AS num1, 2.88 AS num2
UNION
SELECT 6.39 AS num1, 3.99 AS num2
) AS t
ORDER BY result DESC
上述SQL语句中,首先定义了一个子查询,用于查询需要进行相除的数字。
题主把问题描述的清楚一些,你的题意和数据库表结构没有对应关系
jiyugpt
你可以使用SQL Server中的SELECT语句来进行相除求值并排序的操作。以下是示例代码:
SELECT [序号], [AA]/[BB] AS Result
FROM [GP_GPDMB_TMP9]
ORDER BY [序号]
这个查询语句会将表中的每一行的AA列的值除以BB列的值,并将结果作为Result列返回。最后,根据序号列进行排序。
运行上述查询后,将会得到以下结果:
序号 Result
--------------
1 0.330
2 1.193
3 0.703
4 0.766
注意,如果你需要结果的小数位数精确到两位,你可以使用CAST或者CONVERT函数来指定精度。以下是修改后的查询语句:
SELECT [序号], CAST([AA]/[BB] AS DECIMAL(18,2)) AS Result
FROM [GP_GPDMB_TMP9]
ORDER BY [序号]
这将返回结果:
序号 Result
--------------
1 0.33
2 1.19
3 0.70
4 0.76