[英]Using ROW_NUMBER () to Compare 1st ARRAY to 2nd, 3rd, 4th, etc
[英]Merge 1st and Second Row, 3rd and 4th Row and so on
假設我的桌子上有行,
Id Value
----------
1 a
1 b
1 c
1 d
1 e
1 f
預期結果應該是
Id Value1 Value2
-------------------
1 a b
1 c d
1 e f
我在這里很困惑。
好的,肯定有一種更簡單的方法可以做到這一點,但這可以起作用:
WITH CTE AS
(
SELECT *,
RN = ROW_NUMBER() OVER(PARTITION BY Id ORDER BY Value)
FROM dbo.YourTable
)
SELECT Id,
MIN(CASE WHEN RN % 2 = 1 THEN Value END) Value1,
MIN(CASE WHEN RN % 2 = 0 THEN Value END) Value2
FROM CTE
GROUP BY Id,
RN - ((RN - 1) % 2);
結果如下:
╔════╦════════╦════════╗
║ Id ║ Value1 ║ Value2 ║
╠════╬════════╬════════╣
║ 1 ║ a ║ b ║
║ 1 ║ c ║ d ║
║ 1 ║ e ║ f ║
╚════╩════════╩════════╝
;WITH cte AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY value) AS RowNum
FROM YourTable
)
SELECT
c1.id
, c1.value as Value1
, c2.value as Value2
FROM cte c1
LEFT JOIN cte c2 ON c1.rownum = c2.rownum - 1
WHERE c1.RowNum % 2 = 1
select Id
,min(Value) as Value1
,max(Value) as Value2
from (select Id,Value
,(row_number () over
(partition by Id order by Value)+1)/2 as group_id
from mytable as t
) t
group by Id
,group_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.