分組迴圈查詢實現列轉行

2021-09-25 15:13:13 字數 2147 閱讀 8493

開發工具與關鍵技術: visualstudio 2015   mvc
在做專案的過程中遇到過這樣乙個問題,我需要把資料庫一張表的多條費用資料查出來,並且讓他在一行顯示,多條費用是指不同的費用,而我這個資料庫表只有乙個欄位來儲存這些費用,(這個字段儲存的是外來鍵,多種費用是固定在另一張表裡,新增的時候只需要把外來鍵新增到那個欄位裡),兩個資料庫表如下圖所示:

1、固定費用表

2、需要查詢的表

我要查詢這張表裡的這個人的多條費用,並讓其在一行顯示,如果按最普通的思路去寫查詢,也就是查外來鍵這張表連查固定的這張表,就可以查出他的多條費用資料,雖然可以查出他的多條費用,但是查出來的結果集並不是一條,而是這個人他有多少條費用資料,就會顯示多少條資料。

如下圖所示:

很顯然,按普通的查詢思路去做,是達不到我需要的要求,換一種思路去想,我們查詢的那張表裡乙個人有多條費用,他裡面有那個人的外來鍵,我們可以通過查詢那個人的外來鍵,對他進行進行分組,因為那張表裡不只他乙個人的費用,他存在多個人的多條費用資料,所以根據對應的人進行分組,分組後再進行迴圈,通過迴圈的方式把每組裡的費用新增到新new的實體裡,輸出的時候就輸出新new的實體,這樣就可以達到一條顯示的效果了。也就是普通的查詢思路查出來的資料是一列顯示,分組查詢再迴圈的方法查詢出來的結果是一行顯示,也就是列轉行。

詳情**如下:

listlistchargecheckin = new list();

//查詢所有費用資料,根據長者id進行分組

var list = (from tbcost in mymodels.b_cost

select new chargedetailvo

).distinct().tolist();

//迴圈

for (int i = 0; i <

list.count(); i++)

).tolist();

chargedetailvo listchargecheckin1 = new chargedetailvo();

listchargecheckin1.elderid =

list2[0].elderid;

listchargecheckin1.eldername =

list2[0].eldername;

listchargecheckin1.entersite =

list2[0].entersite;

listchargecheckin1.checkintime =

list2[0].checkintime;

listchargecheckin1.costdetail2 =

list2[1].costdetail2;

listchargecheckin1.costdetail4 =

list2[3].costdetail2;

listchargecheckin1.costdetail3 =

list2[2].costdetail2;

listchargecheckin1.costdetail5 =

list2[4].costdetail2;

listchargecheckin1.costdetail9 =

list2[5].costdetail2;

listchargecheckin1.costdetail1 =

list2[0].costdetail2;

//將迴圈的結果新增到實體

listchargecheckin.add(listchargecheckin1);

}

最後,就是效果了,從下面的對比上面普通的思路查詢法結果,可以看出上面的查法結果有36條資料,每個人有6條資料,下面的結果,只有6條,每個人只有一條資料。

如圖所示:

mysql 列轉行以及年月分組

select count distinct a.rect id zcount,a.job dept,date format submit date,y m zsubmit date from 表名 a where a.statu 3 and a.rstatu 2 and a.job dept in ...

SQL 操作列轉行查詢

題目 如下一張學生成績表 tb score t name t course t score 小明 語文 90 小明 數學 87 小明 英語 85 小紅 語文 92 小紅 數學 89 小紅 英語 95 要求,寫出合理的sql語句,得到下面的結果 姓名 語文 數學 英語 小明 90 87 85 小紅 9...

mysql 列轉行 動態查詢列

參考鏈結 建表語句 create table tb score id int 11 not null auto increment,userid varchar 20 not null comment 使用者id subject varchar 20 comment 科目 score double ...