簡體   English   中英

如何在 SQL Server 2008 中將每三行合並為一列?

[英]How to combine each three rows into single column in SQL Server 2008?

NOOfDays   DISTRInutorID
-------------------------    
1           abcd    
1           cdef    
2           DFSDF    
2           SFSDD    
2           SDFSD    
2           WAOYWAR    
7           WEFIWE    
7           WEOFYWE    
7           WFYREU

以上是我的示例表之一,我想根據 NOOfDays 組合每兩行。

預期 output:

NOOfDays         DiSTRInutorID
------------------------------
1                 abcd, cdef              
2                 DFSDF, SFSDD       
2                 SDFSD, WAOYWAR            
7                 WEFIWE, WEOFYWE         
7                 WFYREU

在SQL服務器的古代版本中,邏輯如下:

select n.NOOfDays,
       stuff( (select ',' + t2.DISTRInutorID
               from t t2
               where t2.NOOfDays = n.NOOfDays
               for xml path ('')
              ), 1, 1, ''
            ) as list
from (select distinct NOOfDays from t) n;

編輯:

我誤解了原來的問題。 這就是您要查找的內容:

with cte as (
      select t.*, row_number() over (order by (select null)) - 1 as seqnum
      from t
     )
select NOOfDays,
       (case when count(*) = 1 then min(DISTRInutorID)
             else max(case when seqnum % 2 = 0 then DISTRInutorID end) + ',' + max(case when seqnum % 2 = 1 then DISTRInutorID end)
        end) as list
from cte
group by NOOfDays, floor(seqnum / 2);

請注意,SQL 表表示無序集。 這會任意配對第一列相同的行,但不能保證它們是相鄰的——原因很簡單,“相鄰”沒有定義。

是一個 db<>fiddle。

暫無
暫無

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

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