2017-05-29 95 views
-2

enter image description hereSQL - 根據行中值的出現查找列名稱

這是我的表格測試。 這裏9到22是列名。 我想獲得第一次和最後一次出現的數據1的列名。 我該怎麼做?

例如,在第一行中,第9行和第10列的數據爲1,因此對於此行,我期望獲取9和10. 類似地,在最後一行中,數據1的第一次出現在9中,最後一次出現在17列,我應該得到9和17作爲輸出。 嘗試this問題,但沒有運氣!

+1

看起來更像是C++/C#的一種問題。首先和最後意味着什麼? SQL Server不用於解決矩陣問題。 – PacoDePaco

+1

請自己解決。或者如果您已經完成了一些研究,請將其發佈在您的問題中。顯示你已經搜索和嘗試過。問一個詳細的問題。 – 97amarnathk

+0

歡迎來到SO,您可能需要參加[tour](https://stackoverflow.com/tour),然後閱讀[詢問一個好問題](http://stackoverflow.com/help/how-to-ask ) – Nuageux

回答

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找到第一個發生在過去的發生,扭轉字符串,發現在1號發生反轉的字符串,這將是我們的最後一個。

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)