首页 > 解决方案 > 重新排列使用 INFORMATION_SCHEMA.COLUMNS 的查询的结果

问题描述

基本上,我使用这个查询来查找这个特定表的列。

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'PARTICULAR_TABLE'

我还在下面使用此查询来获取此表的特定列。

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'PARTICULAR_TABLE'
AND COLUMN_NAME in ('A','B','C','D','E')

结果:

COLUMN_NAME
A
B
C
D
E

问题是结果的安排。我的目标是将它安排到我想要的安排。像这样。

期望的结果:

COLUMN_NAME
B
A
C
D
E

我最初的问题是检索这个特定表的列。此查询的结果应显示单列。我能够使用上面使用的查询来实现这一点。现在的问题是这个结果的期望排列。我使用 Microsoft SQL Server Management Studio 2016。

标签: sqlsql-server

解决方案


[OPTON 1] :使用ORDER BY并指定您需要的顺序

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'PARTICULAR_TABLE'
AND COLUMN_NAME in ('A','B','C','D','E')
ORDER BY CASE COLUMN_NAME WHEN 'B' THEN 1 WHEN 'A' THEN 2 WHEN 'C' THEN 3 END

[选项 2]:使用临时表或表变量并按您需要的顺序插入列名

declare @col table
(
    col_order   int identity(1,1),
    colname     varchar(50)
)

insert into @col (colname) values
('B') , ('A') , ('C') , ('D') , ('E')

SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS S
     INNER JOIN @col C ON S.COLUMN_NAME = C.colname
WHERE TABLE_NAME = 'PARTICULAR_TABLE'
ORDER BY C.col_order

推荐阅读