簡體   English   中英

選擇行作為同一個表的列

[英]select rows as columns of the same table

我有一張像這樣的表:

id name   date
---------------------
1  Ann    01/10/2015
2  Betty  01/31/2015
3  Charly 02/15/2015
4  David  03/30/2015
5  Ernest 04/04/2015
6  Frank  04/16/2015
7  Gale   05/02/2015
8  Jack   05/09/2015
9  Kelly  07/31/2015

我怎樣才能像這樣一次檢索 3 行:

1  Ann    01/10/2015 2  Betty  01/31/2015 3  Charly 02/15/2015
4  David  03/30/2015 5  Ernest 04/04/2015 6  Frank  04/16/2015
7  Gale   05/02/2015 8  Jack   05/09/2015 9  Kelly  07/31/2015

所以我有 3 行,以 Id 1、4 和 7 開頭

我使用 SQL Server 2012

您應該在 SQL 中執行此操作嗎? 不,我同意評論。
可以在SQL中完成嗎? 當然。

;with cte AS (SELECT *,(ROW_NUMBER() OVER(ORDER BY id)-1)/3 AS Rnk                     
              FROM Table1)
     ,cte2 AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY Rnk ORDER BY id) AS RN
               FROM cte)
SELECT a.*,b.id AS id2, b.name AS name2, b.date AS date2
          ,c.id AS id3, c.name AS name3, c.date AS date3
FROM cte2 a
LEFT JOIN cte2 b
  ON a.Rnk = b.Rnk
  AND a.RN = b.RN - 1
LEFT JOIN cte2 c
  ON a.Rnk = c.Rnk
  AND a.RN = c.RN - 2
WHERE a.RN = 1  
 ; 

演示: SQL 小提琴

使用帶有ROW_NUMBER()整數除法,您會得到一個重復 3 行的值,可用於將它們切片。

編輯: LEFT JOIN以免排除不完整的行。

暫無
暫無

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

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