我在一个表中有以下数据,这是一个包含多列的表中显示的单列,但只需要使用查询将此列中的数据拉入两列输出中:
+----------------+--+
| DataText | |
| 1 DEC20 DDD | |
| 1 JUL20 DDD | |
| 1 JAN21 DDD | |
| 1 JUN20 DDD500 | |
| 1 JUN20 DDD500 | |
| 1 JUN20DDDD500 | |
| 1 JUN20DDDD500 | |
| 1 JUL20 DDD800 | |
| 1 JUL20 DDD800 | |
| 1 JUL20DDDD800 | |
| 1 JUL20DDDD400 | |
| 1 JUL20DDDD400 | |
+----------------+--+
所需结果:基于数据的前13个字符的不同值,根据“长数据”和“短数据”分为两列,但仅为两列的输出提供前13个字符:
+-------------+-------------+
| ShortData | LongData |
| 1 DEC20 DDD | 1 JUN20 DDD |
| 1 JUL20 DDD | 1 JUN20DDDD |
| 1 JAN21 DDD | 1 JUL20 DDD |
| | 1 JUL20DDDD |
+-------------+-------------+
比如:
Select
(Select DISTINCT LEFT(DataText,13)
From myTable)
Where LEN(DataText)=13) As ShortData
,
(Select DISTINCT LEFT(DataText,13)
From myTable)
Where LEN(DataText)>13) As LongData
如果可能的话,我还想查询/扫描表一次。我无法修改任何这样的示例以使这样的查询工作。
1条答案
按热度按时间crcmnpdw1#
这很难看,但可行。作为初学者,您需要一个列来定义行的顺序—我假设您有这样一个列,这就是
id
.然后,您可以选择不同的文本,根据它们的长度将它们分为不同的组,最后再旋转:
如果您满足于按字符串列本身对记录进行排序,那么就简单了一点(而且,对于示例数据,它会产生相同的结果):
db小提琴演示: