sql - 在 SQL Server 中将垂直书写的单词转为水平书写的单词

标签 sql sql-server tsql transpose

我想用T-SQL来转置一个带有单词的列,比如

t
r
a
i
n

进入

train

我尝试使用枢轴,但不是只用转置列返回一行,而是得到一个 5x5 表,沿对角线显示“火车”,其他地方都为 NULL。这个结果对我来说很有意义,但这不是我想要的。我只想将一个垂直书写的单词转换成同一个单词,但水平书写。我应该如何使用枢轴来解决这个问题?或者有没有更简单的方法可以做到这一点?

相反,如果我从一个词开始

train

我将如何转置这个词以使其垂直打印?

t
r
a
i
n

谢谢!

最佳答案

您可以尝试使用 CTE 递归的一种方法

CREATE TABLE T(
   col varchar(50)
);

insert into t values ('train');

;with cte as (
  select 
         1 startIdx,
         len(col) maxlenght,
         col
  from t
  UNION ALL
  select 
         startIdx+1, 
         maxlenght,
         col
  from cte
  where startIdx + 1 <= maxlenght
)

select substring(col,startIdx,1),col
from cte

sqlfiddle

结果

t
r
a
i
n

如果想让char转置一个单词的列,可以尝试使用FOR XML

create TABLE T2  (c NVARCHAR(1))
INSERT T2 VALUES('t'),('r'),('a'),('i'),('n');

SELECT STUFF((SELECT c FROM T2 FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,0,'')

sqfiddle

结果

train

关于sql - 在 SQL Server 中将垂直书写的单词转为水平书写的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53235852/

相关文章:

php - 我如何将数据从我的 ios 应用程序上传到我的 sql 数据库?

java - 如何连接Android Studio和SQL Server数据库

sql-server - 从列表形成三列表

mysql - 如何在 mySQL 中将一个值拆分为多个列

验证后 PHP 表单为空

sql-server - 在 SQL Server 中 try catch

c# - Linq InsertAllOnSubmit 如果不存在

sql-server - 在 SQL 中使用 ISNULL 的可控制查询

java - 按一对多关联计数排序的 Hibernate 标准

sql - 将 X 个工作日添加到日期