我有一个只包含 1 列的 SQL 表
Column Name
A
A
A
B
B
B
B
C
D
D
E
我需要一个返回切点的 SQL 代码。对于上表,它将返回:
Column Name
3
7
8
10
11
3 是 A 的结尾,7 是 B 的结尾,8 是 C 的结尾,依此类推...
让我们看看你能想出什么:=)
最佳答案
假设数据可以在您的列
上排序,计划是为每一行生成一个行号
并进行分组
检索您的数据点。
SQL Server 2000
DECLARE @YourTable TABLE (Col VARCHAR(1))
CREATE TABLE #TempTable (ID INTEGER IDENTITY(1, 1), Col VARCHAR(1))
SET IDENTITY_INSERT #TempTable OFF
INSERT INTO @YourTable (Col) VALUES ('A')
INSERT INTO @YourTable (Col) VALUES ('A')
INSERT INTO @YourTable (Col) VALUES ('A')
INSERT INTO @YourTable (Col) VALUES ('B')
INSERT INTO @YourTable (Col) VALUES ('B')
INSERT INTO @YourTable (Col) VALUES ('B')
INSERT INTO @YourTable (Col) VALUES ('B')
INSERT INTO @YourTable (Col) VALUES ('C')
INSERT INTO @YourTable (Col) VALUES ('D')
INSERT INTO @YourTable (Col) VALUES ('D')
INSERT INTO @YourTable (Col) VALUES ('E')
INSERT INTO #TempTable
SELECT *
FROM @YourTable
ORDER BY Col
SELECT MAX(ID)
FROM #TempTable
GROUP BY Col
DROP TABLE #TempTable
SQL 服务器 2005
DECLARE @Table TABLE (Col VARCHAR(1))
INSERT INTO @Table VALUES ('A')
INSERT INTO @Table VALUES ('A')
INSERT INTO @Table VALUES ('A')
INSERT INTO @Table VALUES ('B')
INSERT INTO @Table VALUES ('B')
INSERT INTO @Table VALUES ('B')
INSERT INTO @Table VALUES ('B')
INSERT INTO @Table VALUES ('C')
INSERT INTO @Table VALUES ('D')
INSERT INTO @Table VALUES ('D')
INSERT INTO @Table VALUES ('E')
SELECT MAX(RowNumber)
FROM (SELECT RowNumber = ROW_NUMBER() OVER (ORDER BY Col), Col
FROM @Table) t
GROUP BY Col
关于sql - 一个简单但具有挑战性的 SQL 问题,至少我找不到出路,只能在外部进行 (c#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2155553/