簡體   English   中英

使用拆分進行T-SQL分組

[英]T-SQL Grouping With Splits

我想分組連續的值。 我想將前3個Reg單元,一個ICU和最后3個Reg單元分組。 問題是第3組與第一組相同,我無法單獨對它們進行分組。 我試過窗口功能和其他東西無濟於事。 會欣賞任何想法。 謝謝。

數據集

ID  OccpdID   Unit
1     1       Reg
1     2       Reg
1     3       Reg
1     4       ICU
1     5       Reg
1     6       Reg
1     7       Reg

結果是:

ID  OccpdID Unit    Group
1     1     Reg      1
1     2     Reg      1
1     3     Reg      1
1     4     ICU      2
1     5     Reg      3
1     6     Reg      3
1     7     Reg      3 

我不確定如何/如果你想讓ID考慮到它,但這樣的事情將提供所需的結果:

SELECT
    ID
    , OccpdID
    , Unit
    , SUM(CASE WHEN Unit <> L OR L IS NULL THEN 1 ELSE 0 END) OVER (ORDER BY OccpdID) [Group]
FROM
    (
        SELECT
            ID
            , OccpdID
            , Unit
            , LAG(Unit, 1, NULL) OVER (ORDER BY OccpdID) L
        FROM YourTable
    ) Q

我會使用lag()和累積總和:

select t.*,
       sum(case when prev_unit = unit then 0 else 1 end) over (order by occpdid) as grp
from (select t.*, lag(t.unit) over (order by t.occpdid) as prev_unit
      from t
     ) t;

您可以嘗試在帶有SUMCASE WHEN窗口函數的子查詢中使用LAG

SELECT ID,OccpdID,Unit,SUM(CASE WHEN Unit <> prevVal THEN 1 ELSE 0 END) OVER(ORDER BY OccpdID) +1 as 'Group'
FROM (
    SELECT *, LAG(Unit) OVER(ORDER BY OccpdID) prevVal
    FROM Dataset
) t1

sqlfiddle

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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