簡體   English   中英

用於從具有復雜結構的表中選擇數據的SQL查詢

[英]sql query for selecting data from a table with complex structure

我有一張下面結構的桌子。

我無法控制更換桌子。

它有三列:student_name,student_id,name_id

現在學生姓名可以是任意數量的單詞。 確切地說,一個單詞將出現在一行中。 根據單詞的數量,將輸入name_id並重復student_id。

結構可能是這樣的:

說name1是:Ram Laxman Prasad Sharma

和名字2是:Pandit Gangadhar Vidyadhar Mayadhar Omkarnath Shastri

所以表格看起來像:

student_name  |   student_id    |   name_id
-------------------------------------------------
 Ram                 1               1
 Laxman              1               2
 Prasad              1               3
 Sharma              1               4
 Pandit              2               1
 Gangadhar           2               2
 Vidyadhar           2               3
 Mayadhar            2               4
 Omkarnath           2               5
 Shastri             2               6

我希望我能清楚地解釋這個結構。

現在,我想編寫一個查詢,只讀取每個學生的前四個名字。 但是,如果名稱的數量小於4,則應該使用空字符串,如果其大於4,則前四個應該去休息而忽略。

我只需要將它放在一個select查詢中,因為這個查詢將在spring批處理程序中傳遞。 但我沒有得到如何遍歷nameid列以獲取每個學生的前四個名稱ID。

如何為DB2數據庫v8設計這個sql?

謝謝閱讀。

首先,我沒有DB2,因此可能會有一些語法更改

請嘗試以下方法

select t1.student_id, ifnull(t2.names, ' ') from
(select distinct(student_id) as student_id 
 from tab ) as t1
left outer join
(
select tab1.student_id, ifnull(concat(tab1.student_name, ' ',
   tab2.student_name, ' ',
   tab3.student_name, ' ',
   tab4.student_name),'') as names
from (select * from tab where name_id = '1') tab1
inner join (select * from tab where name_id = '2') tab2
on tab1.student_id = tab2.student_id
inner join (select * from tab where name_id = '3') tab3
on tab1.student_id = tab3.student_id
inner join (select * from tab where name_id = '4') tab4
on tab1.student_id = tab4.student_id
) as t2
on t1.student_id = t2.student_id

我已經假設你的name_id是chars。 還要記住,我已經為MySQL編寫了這個查詢,DB2可能有不同的語法

受Amit啟發的改進版本 - 如果你需要1列中的所有4個名字:)

  select
    t1.student_name || 
    coalesce(' ' || t2.student_name, '') ||
    coalesce(' ' || t3.student_name, '') ||
    coalesce(' ' || t4.student_name, '') as "first 4 names"
  from mytable t1
  left join mytable t2 on t1.student_id = t2.student_id and t2.name_id = 2
  left join mytable t3 on t1.student_id = t3.student_id and t3.name_id = 3
  left join mytable t4 on t1.student_id = t4.student_id and t4.name_id = 4
  where t1.name_id = 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM