【发布时间】:2015-09-11 09:19:55
【问题描述】:
假设我有一张桌子
id Values
1 A
2 B
3 C
4 7
5 J
6 K
7 L
现在我想要一个像
这样的输出id Values
1 A
2 B
3 C
4 J
5 K
6 L
7 7
如何做到这一点?
【问题讨论】:
标签: .net sql-server-2012
假设我有一张桌子
id Values
1 A
2 B
3 C
4 7
5 J
6 K
7 L
现在我想要一个像
这样的输出id Values
1 A
2 B
3 C
4 J
5 K
6 L
7 7
如何做到这一点?
【问题讨论】:
标签: .net sql-server-2012
使用子查询/CTE 对每列进行独立排序生成 ROW_NUMBER(),并使用生成的 rn 连接:
;WITH cte AS
(
SELECT
[id],
rn = ROW_NUMBER() OVER(ORDER BY id)
FROM tab
)
,cte2 AS
(
SELECT
[values],
rn = ROW_NUMBER() OVER(ORDER BY CASE
WHEN LEFT([values],1) LIKE '%[A-Z]%'
THEN 1
ELSE 2
END, [values])
FROM tab
)
SELECT c1.id, c2.[values]
FROM cte c1
JOIN cte2 c2
ON c1.rn = c2.rn;
【讨论】: