【问题标题】:Is there a better way of computing the weight有没有更好的方法来计算重量
【发布时间】:2019-09-18 03:08:07
【问题描述】:

我需要根据 r1/Total Weight 计算一列

DECLARE @total float(50)
SELECT @total=sum([Sales].[SalesOrderDetail].LineTotal) from [Sales]. 
[SalesOrderDetail]

Select r.LineTotal, r.LineTotal/@total as 'weight'
from [Sales].[SalesOrderDetail] r
order by LineTotal desc

有没有更简洁的方法?

【问题讨论】:

  • 用更少的字符编写代码通常是错误的。在这种情况下实际上有必要这样做吗? SQL 是一种声明性语言:你告诉它你想要什么,它就会找出一种有效的方法来实现它。如果没有,那就是你调查的时候。

标签: sql-server tsql


【解决方案1】:

使用计算总和的子查询更简单:

SELECT 
  LineTotal, 
  LineTotal / (SELECT SUM(LineTotal) FROM [Sales].[SalesOrderDetail]) AS weight
FROM [Sales].[SalesOrderDetail] 
ORDER BY LineTotal DESC

CROSS JOIN:

SELECT 
  s.LineTotal, 
  s.LineTotal / t.SumLineTotal AS weight
FROM [Sales].[SalesOrderDetail] AS s CROSS JOIN (
  SELECT SUM(LineTotal) AS SumLineTotal 
  FROM [Sales].[SalesOrderDetail]
) AS t
ORDER BY s.LineTotal DESC

CTE:

WITH cte AS  (
  SELECT SUM(LineTotal) AS SumLineTotal 
  FROM [Sales].[SalesOrderDetail]
)
SELECT 
  LineTotal, 
  LineTotal / (SELECT SumLineTotal FROM cte) AS weight
FROM [Sales].[SalesOrderDetail] 
ORDER BY LineTotal DESC

【讨论】:

    猜你喜欢
    • 2017-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-25
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    相关资源
    最近更新 更多