Mysql

對錶進行排序,以便連結的行在整體 alpha 排序中顯示為子集

  • July 30, 2017

我有這張成員表,其中成員資格是單身或家庭,如果是家庭,他們可以是家庭負責人或受撫養人。輸出成員視圖時,它目前按 alpha 升序排序,但我想找到一種方法將一個家庭負責人的所有家屬放在頭下。

相關欄目是:

isFam ( tinyint(1) )
isFamHead ( tinyint(1) )
memKey ( int(11) )

是否有某種方法,在 mysql 查詢中,按字母順序對單個成員和戶主的表進行排序,但將戶主的家屬直接放在戶主的下方?

(如果所有家庭成員都有相同的姓氏,這種方法現在有效,但在很多情況下我發現他們沒有。而且不同的家庭也可以有相同的姓氏,所以……)

從評論:

  • memKey標識一個成員。對於單個會員資格,只有一行具有該memKey; 對於家庭成員資格,給定家庭的所有成員都將具有相同的memKey.
  • 對於單個成員,isFam為 0;對於所有家庭成員,isFam= 1。
  • 每個家庭成員的“戶主”有isFamHead= 1;應該只有一行 where isFamHead= 1 per memKey。(忽略isFamHead單個成員的值)

所以 - 做出以下假設:

  • memKey對於一家之主和該家族的所有附屬成員來說都是一樣的;
  • 在子成員行中沒有指向族主記錄的直接指針。
  • isFamHead用作布爾值,其中“1”表示該行代表一家之主,“0”表示不代表該行。
  • memKey任何給定的where isFamHead= 1只有一行

來自評論:“單身”會員(1 人,無家庭)的isFam成員 = 0。屬於家庭成員的成員isFam= 1;只有家庭中的主要成員isFamHead= 1,其餘的將是 0。

像這樣的東西應該​​工作。當然,列名和表名是由組成的,因為除了三個相關的列之外沒有提供任何內容。

SELECT CASE WHEN `isFamHead` = 1 OR `isFam` = 0 THEN CONCAT(lastname,', ',firstname) ELSE '' END
      as FamilyHead
     ,CASE WHEN `isFamHead` = 0 AND `isFam` = 1 THEN '' ELSE CONCAT(lastname,', ',firstname) END
      as FamilyMember
     ,'blah blah' as Additional_Columns
 FROM (
       SELECT fh.lastname as fh_lastname
             ,fh.firstname as fh_firstname
             ,m.*
         FROM member m
                INNER JOIN member fh ON (m.memKey = fh.memKey AND fh.isFamHead = 1)
      ) sq
ORDER BY fh_lastname, fh_firstname, memKey, isFamHead DESC, lastname, firstname;

isFamHead我們的子查詢將目前行的行的名字和姓氏添加memKey到目前行的數據中。

然後,我們按以下方式排序: - 戶主的姓氏和名字 - memKey(以防有兩個戶主同名 - 這將每個實際的家庭組拉到一起) -isFamHead按降序排列 - 這使得戶主排在第一行每個家庭組 - 最後是成員的姓氏和名字。

如果我們有以下家庭:

  • 約翰·史密斯(負責人)、簡·利維、保羅·史密斯-利維、弗蘭克·史密斯(memKey= 10000)
  • 約翰史密斯(負責人)、帕蒂史密斯、傑克史密斯、阿爾文 C 蒙克(memKey= 10001)
  • 阿德里安·蒙克(負責人)、特魯迪·蒙克、安布羅斯·蒙克
  • 史蒂夫·羅傑斯(單人)

這應該給我們以下輸出:

Family Head          Family Member
------------------   -------------------
Monk, Adrian
                    Monk, Ambrose
                    Monk, Trudy
Rogers, Steve
Smith, John
                    Levy, Jane
                    Smith, Frank
                    Smith-Levy, Paul
Smith, John
                    Monk, Alvin C
                    Smith, Jack
                    Smith, Patty

注意:程式碼未經測試。

您應該考慮這個或另一個相關表中的一些組 ID。將具有相同組 ID 的帳戶標記為您可以將其中的 1 個或多個作為增強帳戶類型。

有道理?

引用自:https://dba.stackexchange.com/questions/177334