2010-11-30 7 views
0

Cela devrait être assez simple. Je crée un ensemble de données qui contiendra un champ de description que je voudrais trier. La raison pour laquelle je veux trier le dataadapter et pas dans mon SQL est que je commande déjà par les résultats qui ont une valeur particulière.Trier les données par ordre alphabétique - VB.Net

My SQL ressemble à ceci:

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 

Mon VB ressemble à ceci:

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) 

Je veux trier les lignes de données est ds.Tables (0) par pif_desc mais toujours avoir les lignes avec fundunits> 0 listé en premier.

Je suis également ouvert à d'autres suggestions sur la façon dont je peux réaliser la bonne commande.

Répondre

1

La sortie que vous recherchez ressemble-t-elle plus à ceci?

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

Si oui, essayez cette requête SQL:

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

Je l'avais essayé, mais je ne veux pas que les valeurs supérieures à commander, mais fundunits, juste pour qu'ils figurent en haut de la liste et la liste alphabétique. Je pense que je vais devoir faire deux listes et les combiner. – TGuimond

+0

J'ai mis à jour ma réponse pour correspondre à ce que je pense que vous demandez ... – bitxwise

1

DataView doit être utilisé chaque fois que le tri ou le filtrage doit être appliqué dans le code. Regarde.

Questions connexes