[英]How can I add a calculated column based on another column in an SQL select statement
[英]Need to add a calculated column for grouping purposes based on data in SELECT statement
幾年后重新開始使用 SQL 非常生疏。 我目前從一個簡單的表中獲得以下結果集,“類型”定義為 (H)eader 和 (D)etails:
獨特的 | 描述 | 類型 |
---|---|---|
1 | 現金 | H |
2 | 1000 | D |
3 | 1100 | D |
4 | 1200 | D |
5 | 固定的 | H |
6 | 2000 | D |
7 | 2100 | D |
8 | 2200 | D |
9 | 非固定 | H |
10 | 3000 | D |
11 | 3100 | D |
我需要另一列'Calc',它將評估'Type'列並返回'Type'為'H'的'Description',在所有'D'行中重復'Description',直到這樣一點'D' 再次更改為 'H',因此這將反映在結果中,如下所示。 僅供參考,這是在 SQL 之外使用的,因此需要添加分組。
獨特的 | 描述 | 類型 | 計算 |
---|---|---|---|
1 | 現金 | H | 現金 |
2 | 1000 | D | 現金 |
3 | 1100 | D | 現金 |
4 | 1200 | D | 現金 |
5 | 固定的 | H | 固定的 |
6 | 2000 | D | 固定的 |
7 | 2100 | D | 固定的 |
8 | 2200 | D | 固定的 |
9 | 非固定 | H | 非固定 |
10 | 3000 | D | 非固定 |
11 | 3100 | D | 非固定 |
我當前的查詢非常簡單:
SELECT unique, description, type from table
到目前為止,我已經研究過設置一個變量並嘗試將其設置為“Calc”字段,但沒有成功。 我也嘗試過 LAG 和 LEAD 的組合,但同樣沒有取得任何成功。
非常感謝您對此的任何幫助。
提前致謝
我們可以在CASE
表達式的幫助下使用聚合函數,例如MAX
,作為分析函數。 此外,您的要求實際上是一個間隙和孤島問題,因為沒有組列知道如何應用 H 描述。
WITH cte AS (
SELECT *, COUNT(CASE WHEN Description IN ('CASH', 'FIXED', 'NON-FIXED')
THEN 1 END) OVER (ORDER BY Unique) AS grp
FROM yourTable
)
SELECT *, MAX(CASE WHEN Type = 'H' THEN Description END) OVER
(PARTITION BY grp) AS Calc
FROM cte
ORDER BY Unique;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.