这是我的表测试。 这里9到22是列名。 我想获取第一次和最后一次出现数据1的列名。 我该怎么做?
例如,在第一行中,我有第9列和第10列的数据1,因此对于此行,我希望获取9和10。 类似地,在最后一行中,第一次出现的数据1在9中,最后一次出现在17列中,因此我应该得到9和17作为输出。 试过this问题,但没有运气!
答案 0 :(得分:1)
如果你有固定数量的列,你可以
MariaDB [sandbox]> drop table if exists t;
Query OK, 0 rows affected (0.03 sec)
MariaDB [sandbox]> create table t (id int, col1 int,col2 int,col3 int,col4 int);
Query OK, 0 rows affected (0.12 sec)
MariaDB [sandbox]> insert into t values
-> (1,1,1,0,0),
-> (2,0,0,1,1);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
MariaDB [sandbox]>
MariaDB [sandbox]> select t.id, concat(col1,col2,col3,col4), instr(concat(col1,col2,col3,col4),1) firstcol,
-> 5 - instr(reverse(concat(col1,col2,col3,col4)),1) lastcol
-> from t;
+------+-----------------------------+----------+---------+
| id | concat(col1,col2,col3,col4) | firstcol | lastcol |
+------+-----------------------------+----------+---------+
| 1 | 1100 | 1 | 2 |
| 2 | 0011 | 3 | 4 |
+------+-----------------------------+----------+---------+
2 rows in set (0.00 sec)
答案 1 :(得分:1)
Declare @InputTable Table
(
A9 varchar(1),
A10 varchar(1),
A11 varchar(1),
A12 varchar(1),
A13 varchar(1),
A14 varchar(1),
A15 varchar(1),
A16 varchar(1),
A17 varchar(1),
A18 varchar(1),
A19 varchar(1),
A20 varchar(1),
A21 varchar(1),
A22 varchar(1)
)
Insert into @InputTable values
(1,1,0,0,0,0,0,0,0,0,0,0,0,0),
(0,0,1,1,0,0,0,0,0,0,0,0,0,0),
(0,0,0,0,1,1,0,0,0,0,0,0,0,0),
(0,0,0,0,0,0,1,1,0,0,0,0,0,0),
(0,0,0,0,0,0,0,0,1,1,0,0,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,1,1),
(1,1,1,1,1,1,1,1,1,1,1,0,0,0),
(0,0,0,0,0,0,0,0,0,1,1,1,0,0),
(0,0,0,0,0,0,0,0,0,0,0,0,1,1),
(1,1,1,1,1,1,1,1,1,0,0,0,0,0)
Select concat('A',8+CHARINDEX('1',Derivedcolumn)) [First], concat('A',23-charindex('1',reverse(derivedcolumn)))[Last] from
(
Select A9+A10+A11+A12+A13+A14+A15+A16+A17+A18+A19+A20+A21+A22 DerivedColumn,* from @InputTable
)InputTable
组合每一列,使用CHARINDEX查找第一次出现,并在最后一次出现时,反转字符串并在反向字符串中找到第一次出现,这将是我们案例中的最后一次。