2016-12-02 64 views
3

我面臨一個問題,我似乎無法找到任何地方的解決方案。我在mySQL中有一個表格,內容如下:如何在mySQL中選擇無空的最後一列

RoleDuty1 
RoleDuty2 
RoleDuty3 
RoleDuty4 
RoleDuty5 
RoleDuty6 
RoleDuty7 

此表只有一行或一條記錄。我想看看錶中最後一列是非NULL這意味着我想動態獲取列名RoleDuty7作爲mySQL的答案,因爲所有列的內部都有一些除Null以外的值。

任何人有任何想法我該怎麼做?

+8

你應該而是改變你的餐桌設計。 –

回答

1

這也正是聚結的功能是什麼:

SELECT COALESCE(RoleDuty1,RoleDuty2,RoleDuty3,RoleDuty4,RoleDuty5,RoleDuty6,RoleDuty7,'All null) as FIRST_NON_NULL 
FROM aTable 
+0

這給你在列中的價值,而不是列名 – kbball

+0

@kbball - 好點,如果他真的需要列名我不知道如何幫助他。 – Hogan

0

我認爲你必須使用COALESCE與一羣CASE語句,就像這樣:

SELECT COALESCE(rd1, rd2, rd3, rd4, rd5, rd6, rd7) 
FROM 
(SELECT 
CASE WHEN roleduty1 IS NOT NULL THEN 'roleduty1' ELSE NULL END AS rd1, 
CASE WHEN roleduty2 IS NOT NULL THEN 'roleduty2' ELSE NULL END AS rd2, 
.... 
FROM t) sub 
0
SELECT (
    CASE FirstNullColumn 
     WHEN 'RoleDuty1' THEN 'None' 
     WHEN 'RoleDuty2' THEN 'RoleDuty1' 
     WHEN 'RoleDuty3' THEN 'RoleDuty2' 
     WHEN 'RoleDuty4' THEN 'RoleDuty3' 
     WHEN 'RoleDuty5' THEN 'RoleDuty4' 
     WHEN 'RoleDuty6' THEN 'RoleDuty5' 
     WHEN 'RoleDuty7' THEN 'RoleDuty6' 
     ELSE 'RoleDuty7' 
     END 
) AS LastNonNullColumn 
FROM (
    SELECT (
     CASE 
      WHEN RoleDuty1 IS NULL THEN 'RoleDuty1' 
      WHEN RoleDuty2 IS NULL THEN 'RoleDuty2' 
      WHEN RoleDuty3 IS NULL THEN 'RoleDuty3' 
      WHEN RoleDuty4 IS NULL THEN 'RoleDuty4' 
      WHEN RoleDuty5 IS NULL THEN 'RoleDuty5' 
      WHEN RoleDuty6 IS NULL THEN 'RoleDuty6' 
      WHEN RoleDuty7 IS NULL THEN 'RoleDuty7' 
      ELSE 'None' 
     END 
    ) AS FirstNullColumn 
    FROM MyTable 
) 
相關問題