2

良い一日、

そのため、クエリを実行しているテーブルに次のような複数の連続した列がある SQL クエリに行き詰まっています。

Property1,
Property2,
Property3,
Property4,
Property5
..etc

現在、同じ命名規則で約 64 の列があります。それらはタイプのvarcharであり、ブール関数を示す単一の「Y」または「N」でマークされています(私のデザインではありません)

今私が立ち往生しているのは、クエリで、単一のレコードで「Y」としてマークされている最初のプロパティ列を返す必要があることです..

私は周りを検索しましたが、他の場所で尋ねられた同じ質問に出くわすことはできませんでした..多分私はそれを見逃していますか?

誰かが私がフォローするためのヒントを持っていれば、本当に感謝していますか? 前もって感謝します!

4

5 に答える 5

3

基本的な考え方は、すべてのフィールドを 1 つの文字列に連結し、最初に出現するインデックスを見つけてY、フィールド ラベルをPROPERTY+として形成することFIRST OCCURRENCE INDEXです。Yが見つからない場合はPROPERTY0、このクエリに表示されます。たとえば、CASE ステートメントでこれを処理できます。

SQLFiddle デモ

select id,
       'PROPERTY'+
       CONVERT(VARCHAR(10),CHARINDEX('Y',property1+property2+property3)) 

from T
于 2013-11-07T08:42:25.123 に答える
2

あのデザインはひどい。しかし、これはうまくいくはずです:

SELECT CASE WHEN Property1 = 'Y' THEN 'Property1'
            WHEN Property2 = 'Y' THEN 'Property2'
            [...]
       ELSE 'None'
       END
于 2013-11-07T08:42:18.223 に答える
1

これを試して:

select 
CASE WHEN QryGroup1 = 'Y' then 'QryGroup1'
WHEN QryGroup2 = 'Y' then 'QryGroup2'
WHEN QryGroup3 = 'Y' then 'QryGroup3'
WHEN QryGroup10 = 'Y' then 'QryGroup10'
else ''
end as [SelectedBP]
from OCRD
于 2013-11-07T08:56:36.577 に答える
0

これも同様に機能します:

SELECT CHARINDEX ( 'Y' , CONCAT(Property1,Property2,...,Property64) )

列の数値インデックスを返し、関数ベースのインデックスを定義してクエリを高速化できるという利点があります。

于 2013-11-07T09:03:57.130 に答える