【发布时间】:2012-10-27 16:55:14
【问题描述】:
我现在已经被这个问题困扰了一段时间..
如何根据 B 列的内容对 A 列进行排序?
我有这个样本:
ID count columnA ColumnB
-----------------------------------
12 1 A B
13 2 C D
14 3 B C
我想这样排序:
ID count ColumnA ColumnB
-----------------------------------
12 1 A B
14 3 B C
13 2 C D
所以如果ColumnB的上一行=ColumnA的下一行,我需要对行进行排序
我在想一个循环?但无法完全想象它会如何工作......
我在想它会像这样(也许)
SELECT
a.ID, a.ColumnA, a.ColumnB
FROM
TableA WITH a (NOLOCK)
LEFT JOIN
TableA b WITH (NOLOCK) ON a.ID = b.ID AND a.counts = b.counts
WHERE
a.columnB = b.ColumnA
虽然上面的代码不起作用,但我正在考虑更多...
DECLARE @counts int = 1
DECLARE @done int = 0
--WHILE @done = 0
BEGIN
SELECT
a.ID, a.ColumnA, a.ColumnB
FROM
TableA WITH a (NOLOCK)
LEFT JOIN
TableA b WITH (NOLOCK) ON a.ID = b.ID AND a.counts = @counts
WHERE
a.columnB = b.ColumnA
set @count = @count +1
END
如果这是 C 代码,对我来说会更容易,但 T-SQL 的语法对于像我这样的菜鸟来说有点困难。
非常感谢任何帮助!
编辑:示例代码
drop table tablea
create table TableA(
id int,
colA varchar(10),
colb varchar(10),
counts int
)
insert INTO TableA
(id, cola, colb, counts)
select 12, 'Bad', 'Cat', 3
insert INTO TableA
(id, cola, colb, counts)
select 13, 'Apple', 'Bad', 1
insert INTO TableA
(id, cola, colb, counts)
select 14, 'Cat', 'Dog', 2
select * FROM TableA
SELECT a.ID, a.ColA, a.ColB
FROM TableA a WITH (NOLOCK)
LEFT JOIN TableA b WITH (NOLOCK)
ON a.ID = b.ID
Where a.colB = b.ColA
ORDER BY a.ColA ASC
【问题讨论】:
-
欢迎来到 Stack Overflow!添加代码或表格数据时,请使用 4 空格缩进。您可以通过选择相应的文本并单击工具栏上的
{}按钮或按下Ctrl+K快捷方式来自动添加缩进。谢谢! -
更多格式化帮助:Markdown Editing Help.
-
这是 SQL Server 吗?如果有,是 2005+ 版本吗?
标签: tsql sorting rows multiple-columns