我需要幫助在 SQL Server 的 SQL 視圖中回傳當前值。
UNION ALL我在 SQL 視圖中有很多由 a 連接的列。其中一個價值是該人一年內的平均工資。
當前視圖類似于:
| 人 | 地點 | 平均的 |
|---|---|---|
| 一種 | X | 30,000 |
| 乙 | 是 | 40,000 |
| C | X | 50,000 |
| D | Z | 30,000 |
| 乙 | 是 | 60,000 |
(請原諒虛擬變數和資料)
該平均值是根據不同表中的兩個值計算得出的,并已使用LEFT OUTER JOIN. 這意味著任何未來基于的計算[Average]都將在cte.
我現在想添加另一列來獲取“包平均值”。這是平均值的平均值,但每個值只計算一次。在此示例中,這將是 45,000(如果我們計算第二個 30,000,則為 42,000)。
我還希望將此包裹平均值放置在視圖的每一行上。
但是,我知道AVG(DISTINCT [Average])這需要匯總。我也知道分析功能avg([Average]),但它不適用于DISTINCT.
任何建議將不勝感激。
uj5u.com熱心網友回復:
您可以加入計算打包平均值的子查詢。
例如:
create view test_view as select * from (values ('A', 'X', 30000), ('B', 'Y', 40000), ('C', 'X', 50000), ('D', 'Z', 30000), ('E', 'Y', 60000) ) v(Person, Location, Average)
select v.*, q.* from test_view v cross join ( select avg(distinct average) as PackageAverage from test_view ) q人 | 位置 | 平均 | 包平均 :----- | :------- | ------: | -------------: 一個 | X | 30000 | 45000 乙| 是 | 40000 | 45000 C | X | 50000 | 45000 D | Z | 30000 | 45000 E | 是 | 60000 | 45000
db<>在這里擺弄
uj5u.com熱心網友回復:
不幸的是,正如您所說,沒有DISTINCT視窗功能。但是您可以使用以下方法破解它ROW_NUMBER:
- 計算每個不同值的行數。
- 有條件地僅聚合那些行號為 1 的值
WITH YourView AS (
SELECT *
FROM (VALUES
('A', 'X', 30000),
('B', 'Y', 40000),
('C', 'X', 50000),
('D', 'Z', 30000),
('E', 'Y', 60000)
) v(Person, Location, Average)
),
Ranked AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY v.Average ORDER BY Person) AS rn
FROM YourView v
)
SELECT *,
AVG(CASE WHEN r.rn = 1 THEN r.Average END) OVER ()
FROM Ranked r;
db<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/430432.html
