2017-02-20 13 views
-1

私のテーブルは次のようになり、のが表1にそれを呼びましょう:同じ列を複数回SQL WHERE節ですか?

ID | value | formID 
---------------------- 
25 Business 1001 
16 John  1001 
5 2/20/17 1001 
30 FormXYZ 1001 
25 Nursing 2345 
16 Sam  2345 
5 1/15/17 2345 
30 FormXYZ 2345 
25 Tech  4500 
16 Sam  4500 
5 2/1/17 4500 
30 FormC  4500 

IDは、そのフィールドの一意の識別子です:
25 =省
16 =名前
5 =日

30 =フォーム名、複数の異なるフォームがあり、FormXYZデータが必要です。


フォームIDは、フォームが3つのフィールドが含まれ、提出された各フォームの一意のIDです。

ここ
Department | Name | Date 
Business  John 2/20/17 
Nursing  Sam  1/15/17 

は、私が営巣し、CASEは、右に動作していないようでした、しようとしているものです:私は可能であればこのような何かを探して、すべてのデータを取得し、単一のクエリを記述しようとしている

私はここに投稿しています。私はここから始めました。

select 
    formID, 
    max(case when ID=25 then value else null end) as Department, 
    max(case when ID=16 then value else null end) as Name, 
    max(case when ID=5 then value else null end) as Date 
from Table1 
group by formID 

これが生成します。SQLでデータを転置する

SELECT value 
FROM Table1 
WHERE ID = '25' 
    UNION ALL 
SELECT value 
FROM Table1 
WHERE ID = '16' 
    UNION ALL 
SELECT value 
FROM Table1 
WHERE ID = '5' 
    UNION ALL 
SELECT value 
FROM Table1 
WHERE ID = '30' and value = 'FormXYZ' 
+0

あなたのデザインはリレーショナルではないので、なぜSQLのような「リレーショナル」ツールを使って結果を得るのですか?なぜアプリケーション言語を使用しないのですか? –

+0

テーブルは残念ながらどうですか?私はそれを変更することはできません。アプリケーションがエントリを検索するのに時間がかかりすぎて、すべての単一の「ID」(そして私の実際のフォームでは12個)を検索する必要があるため、ちょっと整理されたビューを取得しようとしています。 – Nestalna

答えて

0
select dp.value as department, 
     n.value as name, 
     dt.value as date 
from 
    (select formID, value from table1 where id = 25) as dp 
    inner join (select formID, value from table1 where id = 16) as n 
       on dp.formID = n.formID 
    inner join (select formID, value from table1 where id = 5) as dt 
       on dp.formID = dt.formID 
    inner join (select formID, value from table1 where id = 30) as f 
       on dp.formID = f.formID 
where f.value = 'FormXYZ'; 

OR

select 
    case when id = 25 then value end as department, 
    case when id = 5 then value end as date, 
    case when id = 16 then value end as name 
from table1 
where formId in (select formID from table1 
       where id = 30 and value = 'FormXYZ') 
     and id in (5,16,25); 
+0

私はちょうどあなたが内側の結合で与えた最初の例を試しました、それは美しく働いた!あなたは命の恩人です。 – Nestalna

+0

私は2番目が速いと思う。 – McNets

+0

私はちょうどどれが速かったのか尋ねようとしていた、もう一度ありがとう! – Nestalna

1

一つの方法は、case文を使用して、グループを使用してデータをロールアップすることです。

formid Department Name Date 
1001 Business John 2/20/17 
2345 Nursing Sam 1/15/17 
4500 Tech  Sam 2/1/17 

必要に応じてwhere句を追加できます。これは、1回のスキャンでデータを取得する必要があります。

関連する問題