2017-02-20 101 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數據。


FormID爲提交每種形式的唯一ID,該窗體包含3個字段。

我一直想寫檢索所有的數據看起來像這樣一個單一的查詢,如果可能的:

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

這是我一直在努力,築巢和CASE似乎沒有工作適合我,所以我張貼在這裏,我就回到了我開始的地方。

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

我認爲第二個更快 – McNets

+0

我正要問哪一個更快,再次感謝! – Nestalna

1

一個在SQL轉置數據的方法是使用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 

這產生:

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

您可以根據需要添加where子句。這應該在一次掃描中獲得數據。