簡體   English   中英

將針對一個表的多個查詢合並為一個結果集的多個字段

[英]Combine multiple queries against one table into multiple fields of one result set

答案 :這是根據@Michael的答案構建的最終查詢:

SELECT 
    Emp_ID,
    MAX(CASE WHEN Skill_ID = 'WLN' THEN (Rating > 0) END) AS `WLN`,
    MAX(CASE WHEN Skill_ID = 'LOC' THEN (Rating > 0) END) AS `LOC`,
    MAX(CASE WHEN Skill_ID = 'BRV' THEN (Rating > 0) END) AS `BRV`,
    AVG(CASE WHEN Skill_ID IN ('KWH','SIC','DOL') THEN (Rating) END) > 0 AS `KSD`
FROM Emp_Skill
WHERE Emp_ID IN (120,348,361,370)
GROUP BY Emp_ID

問題

我有以下Emp_Skill表:

Skill_ID*  Emp_ID*  Rating
--------------------------
     WLN      120        6
     WLN      348        5
     WLN      361        7
     WLN      370        8
     LOC      120        7
     LOC      370        7
     LOC      348        7
     BRV      120        3
     LOC      361        6
     BRV      348        1
     KWH      348        5
     KWH      120        5
     KWH      361        5
     KWH      370        5
     SIC      361        8
     SIC      348        4
     SIC      120        2
     DOL      348        5
     DOL      361        8

而且我需要知道是否有任意數量的員工對每個技能都有正面的技能評分

所以我們可以說我想看看這個信息對員工120,348,361370。

技能WLN 查詢1為:

SELECT `Emp_ID`, `Rating` > 0 AS `WLN` FROM `Emp_Skill` WHERE `Skill_ID` = 'WLN' AND `Emp_ID` IN (120,348,361,370)

返回:

Emp_ID   WLN
------------
   120     1
   348     1
   361     1
   370     1

技能LOC 查詢2為:

SELECT `Emp_ID`, `Rating` > 0 AS `LOC` FROM `Emp_Skill` WHERE `Skill_ID` = 'LOC' AND `Emp_ID` IN (120,348,361,370)

返回:

Emp_ID   LOC
------------
   120     1
   348     1
   361     1
   370     1

技能BRV 查詢3為:

SELECT `Emp_ID`, `Rating` > 0 AS `BRV` FROM `Emp_Skill` WHERE `Skill_ID` = 'BRV' AND `Emp_ID` IN (120,348,361,370)

返回:

Emp_ID   BRV
------------
   120     1
   348     1

技能KSD 查詢4為:

SELECT `Emp_ID`, AVG(`Rating`) > 0 AS `KSD` FROM `Emp_Skill` WHERE `Skill_ID` IN ('KWH','SIC','DOL') AND `Emp_ID` IN (120,348,361,370) GROUP BY `Emp_ID`

返回:

Emp_ID   KSD
------------
   120     1
   348     1
   361     1
   370     1

問題是: 如何有效地將這些查詢組合到一個結果表中,並將它們全部合並在一起 ,即:

Emp_ID   WLN   LOC   BRV   KSD
------------------------------
   120     1     1     1     1
   348     1     1     1     1
   361     1     1  NULL?    1
   370     1     1  NULL?    1

可能來自組合的SELECT語句? NULL值可以是返回結果集中評估為FALSE任何值)

或者 :從性能角度來看,如果我一個接一個地查詢每個技能等級(使用上面的四個查詢)會更好嗎?

抱歉,如果這對於那里的一些偷窺而言是基本的,但是我已經拉了很多頭發,但我仍然沒有殺死它。 大聲笑。 提前致謝。

這是通過數據透視查詢完成的,該查詢相當於一堆CASE語句。 我認為這應該使您接近所需的內容:

SELECT 
  Emp_ID,
  MAX(CASE WHEN Skill_ID = 'WLN' THEN  (Rating > 0) END) AS `WLN`,
  MAX(CASE WHEN Skill_ID = 'LOC' THEN  (Rating > 0) END) AS `LOC`,
  MAX(CASE WHEN Skill_ID = 'BRV' THEN  (Rating > 0) END) AS `BRV`,
  AVG(CASE WHEN Skill_ID IN ('KWH','SIC','DOL') THEN  (Rating > 0) END) AS `KSD`
FROM Emp_Skill
GROUP BY Emp_ID

暫無
暫無

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

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