Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql T-SQL:如何基于2列对表行进行排序_Tsql_Sorting_Rows_Multiple Columns - Fatal编程技术网

Tsql T-SQL:如何基于2列对表行进行排序

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 -------------------------------

这个问题我已经困扰了一段时间了

如何根据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的下一行

我在想一个循环?但我无法想象它将如何运作

我在想会是这样(也许)

虽然上面的代码不起作用,但我在考虑更多关于

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