-3

テーブル xyz があり、emplid、jan、feb… dec という 13 の列があります。ここに私は以下のようなデータを持っています

EMPLID  JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
123      0   0   0   0   0   5   5   2   6   0   0   0
456      0   2   3   0   0   0   5   5   3   0   0   0
789      5   0   0   5   0   5   0   5   6   3   0   4
ABC      4   5   0   5   5   0   5   0   6   0   0   0

ここで、0 以外のデータが入力された最初の月として出力を取得するように、クエリを作成する必要があります。たとえば、EMPLID 123 を確認すると、JUN として出力を取得する必要があります (JUN が最初の月であるため)。データが 0 以外のこの EMPLID の月) 同様に、456 の場合は FEB、789 の場合は ABC が JAN になります。

4

3 に答える 3

2

Philippがコメントで述べているように、テーブル構造は間違いなく変更されます。そうしないと、将来、このような問題に遭遇することになります..

あなたの質問に答えるために、これを試すことができます:

 select case when JAN > 0 then 'JAN'
             when FEB > 0 then 'FEB'
             when MAR > 0 then 'MAR'
             when APR > 0 then 'APR'
             when MAY > 0 then 'MAY'
             when JUN > 0 then 'JUN'
             when JUL > 0 then 'JUL'
             when AUG > 0 then 'AUG'
             when SEP > 0 then 'SEP'
             when OCT > 0 then 'OCT'
             when NOV > 0 then 'NOV'
             when DEC > 0 then 'DEC'
        end as Month
from xyz
where EMPLID='456'

SQL フィドルのデモ

于 2012-11-22T13:37:48.717 に答える
1

まず、Philippが述べたようにリファクタリングすることをお勧めします: 次のような 1 つのテーブルを使用します。

EMPLID   MONTH   VALUE
123      1       3
123      12      5

この場合、クエリがより簡単になります。

SELECT [MONTH]
FROM YourTable
GROUP BY EMPLID, [MONTH]
HAVING VALUE > 0
AND MIN([MONTH]) = [MONTH]

別の選択肢がない場合は、ケースを使用します。

SELECT 
CASE 
    WHEN JAN > 0 THEN 'JAN'
    WHEN FEB > 0 THEN 'FEB'
    WHEN MAR > 0 THEN 'MAR'
    WHEN APR > 0 THEN 'APR'
    WHEN MAY > 0 THEN 'MAY'
    WHEN JUN > 0 THEN 'JUN'
    WHEN JUL > 0 THEN 'JUL'
    WHEN AUG > 0 THEN 'AUG'
    WHEN SEP > 0 THEN 'SEP'
    WHEN OCT > 0 THEN 'OCT'
    WHEN NOV > 0 THEN 'NOV'
    WHEN DEC > 0 THEN 'DEC'
    ELSE 'No Month found' 
END AS FirstMonth
FROM YourTable
于 2012-11-22T13:40:33.443 に答える
0

フィリップが言ったように、テーブルには別の構造を使用することをお勧めします。現在の構造を使用すると、次のようなことができます。

Select a.EMPLID, case when (select b.JAN from tbl b where a.EMPLID=b.EMPLID) > 0 then 'JAN' 
                      when.....etc(the same for each month).... end as Val
  from tbl a

おそらくこれは最善の解決策ではありませんが、機能するはずです。

于 2012-11-22T13:41:39.823 に答える