簡體   English   中英

需要根據 SELECT 語句中的數據添加計算列以進行分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM