【问题标题】:T-SQL: how to sort table rows based on 2 columnsT-SQL:如何根据 2 列对表行进行排序
【发布时间】: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


【解决方案1】:

你只需要添加ORDER BY子句

-- 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 计数 Column A ColumnB 12 1 HEY YAY 14 3 BAY DAY 13 2 YAY BAY 所以我希望它是 ID 计数 Column A ColumnB 12 1 HEY YAY 13 2 YAY BAY 14 3 BAY DAY
  • 同理。服务器为您排序。试试看:D
  • 哇,你说得对!虽然还有 1 个问题,但我似乎只得到 2 行> 应该包含最后一个订单的最后一行丢失了? D:
  • 你是什么意思失踪?也许它与您的查询有关。您至少可以将它包含在您的问题中(您使用的查询)吗? :D
  • 查询是: -- SELECT a.ID, a.ColumnA, a.ColumnB, b.ColumnA, b.ColumnB -- FROM TableA WITH a (NOLOCK) -- LEFT JOIN TableA b WITH (NOLOCK) -- ON a.ID = b.ID -- 其中 a.columnB = b.ColumnA --ORDER BY a.ColumnA ASC 我得到的有点像这样: ID a.ColumnA a.ColumnB b.ColumnA b.ColumnB 12 A B B C 14 B C C D b.columnA 和 b.ColumnB 上的 C 和 D 变成了一行而不是列? :O
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多