2010-11-30 12 views
0

Dies sollte ein ziemlich einfaches sein. Ich erstelle einen Datensatz, der ein Beschreibungsfeld enthält, nach dem ich sortieren möchte. Der Grund, warum ich den Datenadapter und nicht in meinem SQL sortieren möchte, ist, dass ich bereits nach den Ergebnissen sortiere, die einen bestimmten Wert haben.Sortieren DataAdapter Alphabetisch - VB.Net

My SQL sieht wie folgt aus:

SELECT pif_desc, pif_fund, psf_end, (CASE WHEN SUM(pmi_units) IS Null THEN 0 ELSE SUM(pmi_units) END) As fundunits 
    FROM tbl_mem INNER JOIN tbl_sfunds 
    ON pm_scheme = psf_scheme 
    INNER JOIN tbl_invfun 
    ON tbl_fund = tbl_fund 
    LEFT JOIN pe_minv 
    ON pmi_fund = pif_fund AND pm_member = pmi_member 
    WHERE pm_member = @pm_member 
    GROUP BY pif_desc, pif_fund, psf_end 
    ORDER BY fundunits DESC 

Mein VB wie folgt aussieht:

Dim cmd As New SqlCommand("getMembersFundsDCGENST", conn) 
     cmd.CommandType = CommandType.StoredProcedure 

     Dim p_pm_member As New SqlParameter("@pm_member", SqlDbType.Int) 
     p_pm_member.Value = pm_member 
     cmd.Parameters.Add(p_pm_member) 

     Dim p_period_closing_date As New SqlParameter("@closingdate", SqlDbType.DateTime) 
     p_period_closing_date.Value = period_closing_date 
     cmd.Parameters.Add(p_closing_date) 

     Dim da As New SqlDataAdapter(cmd) 
     da.Fill(ds) 

Ich möchte die datarows sortieren ist ds.Tables (0) durch pif_desc aber immer noch die Zeilen mit Fundunits> 0 zuerst aufgeführt.

Ich bin auch offen für andere Vorschläge, wie ich die richtige Bestellung erreichen kann.

Antwort

1

Ist die Ausgabe, die Sie suchen, eher so?

pif_desc fundunits 
ABCDEF  6 
CBCDEG  2 
DEFGHI  4 
ADFKHG  0 
BFJSKL  0 
XDFDKF  0 

Wenn ja, versuchen Sie diese SQL-Abfrage:

SELECT pif_desc, 
     pif_fund, 
     psf_end, 
     (CASE WHEN fundunits IS Null THEN 0 
     ELSE fundunits END) As fundunits, 
     (CASE WHEN fundunits IS Null THEN 0 
     ELSE 1 END) As pif_order 
FROM (
      SELECT pif_desc, 
        pif_fund, 
        psf_end, 
        SUM(pmi_units) As fundunits 
      FROM tbl_mem 
      INNER JOIN tbl_sfunds 
        ON pm_scheme = psf_scheme 
      INNER JOIN tbl_invfun 
        ON tbl_fund = tbl_fund 
      LEFT JOIN pe_minv 
        ON pmi_fund = pif_fund AND pm_member = pmi_member 
      WHERE pm_member = @pm_member 
      GROUP BY pif_desc, pif_fund, psf_end 
     ) pifs 
ORDER BY pif_order,pif_desc 
+0

ich versucht hatte, aber ich will nicht die Top-Werte, sondern fundunits bestellt werden, nur für sie an der Spitze der aufgeführten Liste und die aufgelisteten alphabetisch. Ich denke, ich muss zwei Listen machen und sie kombinieren. – TGuimond

+0

Ich habe meine Antwort so aktualisiert, dass sie zu dem passt, nach dem ich glaube, dass Sie danach fragen ... – bitxwise

1

DataView sollte immer dann verwendet werden, wenn im Code sortiert oder gefiltert werden soll. Schau mal.

Verwandte Themen