2016-08-01 25 views
0

我對分組結果集有問題。按照同一順序的結果進行分組

我需要將我的結果分組在Tab_1_colName和(不同部分)Tab_2_Order的結果的順序,如果他們有相同的Tab_2_Ids

所以我有一個結果集第一,它看起來像這樣:

Tab_1_colName Tab_2_colName Tab_2_Id Tab_2_Order 
    Name_1   Type_1   16   10 
    Name_1   Type_2   17   20 
    Name_1   Type_3   18   30 
    Name_2   Type_1   16   10 
    Name_2   Type_2   17   20 
    Name_2   Type_3   18   30 
    Name_3   Type_1   16   400 
    Name_3   Type_2   17   500 
    Name_3   Type_3   18   600 
    Name_4   Type_1   16   10 
    Name_4   Type_3   18   20 
    Name_4   Type_2   17   30 

結果,我需要看起來像這樣:

Group1 => (Name_1 - Name_3) with the IDs in this order (16, 17, 18), 
Group2 => (Name_4) with the IDs in this order (16, 18, 17) 

我沒有衣蝶如何實現這一目標。我試着組直接對數據庫,但我被困在

SELECT 
    Tab_1_colName, Tab_2_Id 
FROM 
    Tab_1, 
    Tab_2 
WHERE 
    Tab_1_othderID = Tab_2_othderID 
group by 
    Tab_2_Id, Tab_1_colName 

我的第二個想法是使用LINQ嘗試一下,但我堅持即使與純SQL快試試

dt.Rows.OfType<DataRow>().OrderBy(x => x["Tab_2_Order"]).GroupBy(r => r["Tab_2_Id"]) 

任何想法如何解決我的問題?

編輯:

預期結果:

第一行:NAME_1與tab_2_order的Tab_2_Ids順序。

第二行:Name_4,其中Tab_2_Ids按tab_2_order排序。

(NAME_2和NAME_3應該是像NAME_1同一組,因爲他們有相同的順序相同Tab_2_Ids)

+0

「我有一個表,看起來像這樣:」。 。 。爲什麼查詢引用兩個表? –

+0

對不起,我有第一個結果集,看起來像這樣,我想分組。 – Bambuk

+0

你能澄清你正在尋找的輸出,它不是100%清楚。 –

回答

0

解決了我的問題。在另一位用戶的幫助下,他很幸運在我運行之前刪除了他的連接。 !:(

非常感謝你:)

反正這裏是我的解決方案:

var dtRows = dt.Rows.OfType<DataRow>(); 

var rows = dtRows.GroupBy(r => 
      String.Join(",", dtRows.Where(q => q[0] == r[0]).OrderBy(o => o[3]).Select(s => s[0]).ToArray()), 
      x => x[2], 
      (key, g) => new Tuple<string, string[]>(key, g.Where(s => s != null).Select(s => s.ToString()).ToArray().Distinct().ToArray()) 
     ).ToList(); 

List<Tuple<string, string[], List<string>>> rowsToWrite = new List<Tuple<string, string[], List<string>>>(); 

foreach (var row in rows) 
{ 
    if (!rowsToWrite.Any(x => x.Item2.SequenceEqual(row.Item2))) 
     rowsToWrite.Add(Tuple.Create(row.Item1, row.Item2, new List<string>())); 
    else 
     rowsToWrite.Select(x => x).Where(x => x.Item2.SequenceEqual(row.Item2)).First().Item3.Add(row.Item1); 
} 
0

你不使用聚合功能,所以你不需要通過GROU .. 改用disticnt爲選擇不同的價值和/或爲了排序的結果,例如:

SELECT distinct 
    Tab_1_colName, Tab_2_Id 
FROM 
    Tab_1, 
    Tab_2 
WHERE 
Tab_1_othderID = Tab_2_othderID 
order by 
    Tab_2_Id, Tab_1_colName 
相關問題