2016-04-04 23 views
4

Birden fazla veri gösterecek C# içinde datagrid kullanarak bir rapor oluşturmaya çalışıyorum ama aynı değere sahiplerse tanıtıcıyı gizler masaC# Çoklu Dize Gizleme Ve Aynı Tanımlayıcı ile İlk Satırı Gösterme için SQL Sorgu

sonuçları bu

gibi bir şey İşte benim kod ve sorgu veritabanında veriler alınırken öyle olmalıdır.

//Seperated public class 
public DataTable ViewDailyRecord(BELReport belreport) { 
     SqlCommand cmd = new SqlCommand(); 
     cmd.Connection = dbcon.getcon(); 
     cmd.CommandType = CommandType.Text; 
     cmd.CommandText = "SELECT * FROM ReportStorageDetails WHERE [email protected]"; 
     cmd.Parameters.AddWithValue("@Date",belreport.DailyReport); 

     SqlDataReader dr = cmd.ExecuteReader(); 
     DataTable table = new DataTable(); 
     table.Load(dr); 

     return table; 
} 

// Code inside my form 
belreport.DailyReport = Convert.ToDateTime(date_day_Daily.Text).ToString("yyyy-MM-dd"); 

DataTable table = balreport.ViewDailyRecord(belreport); 

dgv_daily.DataSource = table; 

Önceden teşekkür ederiz. SQL Server sürümü zaten aynıdır, ancak anlamına gelmez SQL Server Management Studio 2014 Having

+0

Sorun nedir? İstisna? Farklı sonuç ?? –

+0

Verileri SQL veya C# içinde değiştirmek ister misiniz? – Stringfellow

+0

Hayır. Bununla ilgili bir sorun yok. Yapmaya çalıştığım şey yukarıdaki excel formatı gibidir. Bildiğiniz gibi, nativ select * from kullanarak tablodaki tüm verileri seçerseniz, yalnızca tüm sorguyu gösterir. İstediğim şey, eğer tanımlayıcı birden fazla kopyaya sahipse, o zaman tanımlayıcıyı gizler (ilki hariç) fakat aynı idenfier ile olan değeri görünür kalacaktır. –

cevap

3

.. Eğer "Önceki değerini almak için LAG işlevini kullanabilirsiniz 2012+ SQL Server

" kürek çekmek. "Önceki" tanımı satır sırasına göre değişir, dolayısıyla bunları anlamlı bir şekilde sıralamanız gerekir. son kullanıcı genellikle istediği gibi satır yeniden sıralamak mümkün olduğu için

SELECT 
    CASE WHEN ColumnA = LAG(ColumnA) OVER (ORDER BY ColumnA, ColumnB) 
    THEN '' ELSE ColumnA END AS FinalColumnA 
    ,ColumnB 
    ,CASE WHEN ColumnC = LAG(ColumnC) OVER (ORDER BY ColumnA, ColumnB) 
    THEN '' ELSE ColumnC END AS FinalColumnC 
    ,ColumnD 
FROM ReportStorageDetails 
WHERE [email protected] 
ORDER BY ColumnA, ColumnB; 

Normal olarak, son işlemenin bu tür (C# kullanarak) istemci tarafında yapılır.

+0

bunu nasıl sınıf sorgularımda kullanabilirim:/ –

+0

Bir yolu var mı? –

+0

Bu sorguyu sadece "SELECT" yerine kodunuza koyun. Bununla ilgili problem nedir? Açıkçası, 'ColumnABC ...' yerine sütunlarınızın adlarını yazın. –

İlgili konular