關於sqlsugar使用sql函數問題


環境:mysql數據庫鏈接 

需求:想統計數據庫中的設備號,設備狀態,以及設備中子設備的狀態 。

分別為倆個表:

1.設備表:設備號(userId),狀態 (State)

2.自設備表:設備號(userId),子設備類型(E_type),  子設備狀態 (Evalue)

解決方案:

1>使用Sql語句解決

SELECT
  tabledevice.設備編號,
  tabledevice.`終端狀態 `,
  GROUP_CONCAT(tabledevice.硬件狀態) AS '硬件狀態集合' 
FROM (SELECT
    e.UserId AS '設備編號',
    e.State AS '終端狀態 ',
    CONCAT(eState.E_type, ":", eState.E_value) AS '硬件狀態'
  FROM equipment e
    LEFT JOIN equipmentstate eState
      ON e.UserId = eState.UserId
  ) AS tabledevice
GROUP BY tabledevice.設備編號;

使用Join left  根據 userId鏈接倆個表,並將字段CONCAT(eState.E_type, ":", eState.E_value)  將硬件類型和狀態拼接起來  得到的表數據 重命名為 表tabledevice

然后將表分組 ,分別統計為 UserId State 和狀態集合、

注意 GROUP_CONCAT() 是將當前整個分組集合中的某一列,拼成一行數據。如果未分組,則默認整個表某一列全部拼在一起

2>使用SqlSugar解決

還是自己看文檔不夠認真找了幾遍,沒找到原生函數。

原本以為:會像數據類型轉換一樣,使用 SqlFunc 去轉換數據。結果沒有。哈哈

實際是SqlSugar  可以簡介使用sql函數的。

例如:

List<StudentGroup> list9 = db.Queryable<Student>().Where(c => c.id < 20).GroupBy(it => it.sex).Select<StudentGroup>("Sex,count(*) Count").ToList();

恍然大悟, 一下子清楚了。使用sqlsugar解決上面的數據需求

         var res = db.Queryable<Get_Equipment, Get_EquipmentStateDta>((s1, s2) => new object[] {
                     JoinType.Left ,s1.UserId==s2.UserId
                    }
                   ).Select<Get_Equipment>("s1.UserId,State, CONCAT(s2.E_type, \":\", s2.E_value) as hardState");

                    var data = db.Queryable(res).Select<Get_Equipment>("UserId,State,GROUP_CONCAT(hardState) as hardList "
                    ).GroupBy(s1 => s1.UserId).ToList();

數據過濾方式和使用sql語句基本一致。

原始視圖:

 

 

結果如圖示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM