2017-05-29 12 views
-2

enter image description hereSQL - 行内の値の出現に基づいて列名を見つける

これは私のテーブルテストです。 ここで9〜22は列名です。 データ1の最初と最後のオカレンスの列名を取得します。 どうすればよいですか?

たとえば、最初の行にはデータ9が9と10のため、この行では9と10をフェッチする予定です。 同様に最後の行のデータ1は9最後のオカレンスは17列にあるので、出力として9と17を得なければなりません。 this質問はありますが運がない!

+1

C++/C#のような問題があります。最初と最後の意味は何ですか? SQL Serverは行列の問題を解決するためのものではありません。 – PacoDePaco

+1

自分で理解してください。または、いくつかの調査を行った場合は、質問に投稿してください。すでに検索して試したことを示してください。詳細な質問をしてください。 – 97amarnathk

+0

ようこそ、あなたは[ツアー](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) 
関連する問題