Tsql T-SQL:如何基于2列对表行进行排序
这个问题我已经困扰了一段时间了 如何根据B列的内容对A列进行排序 我有这个样本:Tsql T-SQL:如何基于2列对表行进行排序,tsql,sorting,rows,multiple-columns,Tsql,Sorting,Rows,Multiple Columns,这个问题我已经困扰了一段时间了 如何根据B列的内容对A列进行排序 我有这个样本: ID count columnA ColumnB ----------------------------------- 12 1 A B 13 2 C D 14 3 B C 我想这样分类: ID count ColumnA ColumnB -------------------------------
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的下一行
我在想一个循环?但我无法想象它将如何运作
我在想会是这样(也许)
虽然上面的代码不起作用,但我在考虑更多关于
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
您只需要添加
orderby
子句
-- 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
ORDER BY a.ColumnA ASC
但是如果A列和B列的列是实际的单词呢?比如:ID计算列A ColumnB 12 1嘿,耶14 3 BAY DAY 13 2 YAY BAY,所以我希望它是ID计算列A ColumnB 12 1嘿,耶13 2 YAY BAY 14 3 BAY DAY相同。服务器为您排序。试试看:你是对的!虽然还有一个问题,但我似乎只得到了2行>应该包含最后一个订单的最后一行丢失了?D:你说失踪是什么意思?也许这和你的问题有关。您能否至少在您的问题(您使用的查询)中包含它数据查询是:--选择a.ID、a.ColumnA、a.ColumnB、b.ColumnA、b.ColumnB--从表a中选择a(NOLOCK)--将表a与表b左连接(NOLOCK)——在a.ID=b.ID上——其中a.columnB=b.ColumnA——按a.ColumnA ASC排序,我得到的结果有点像:ID a.ColumnA a.columnB.columnB.columnB.b.columnB.b.12 a b C 14 b C C C D,b.ColumnA和b.columnB上的C和D成了一行而不是列?:OWelcome到堆栈溢出!添加代码或表格数据时,请使用4-空格缩进。通过选择相应的文本并单击工具栏上的
{}
按钮或按Ctrl+K
快捷键,可以自动添加缩进。非常感谢。有关格式化的详细帮助:。这是SQL Server吗?如果是,版本是否为2005+?
-- 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
ORDER BY a.ColumnA ASC