数据库
首页 > 数据库> > 用于隐藏多个字符串并显示具有相同标识符的第一行的C#SQL查询

用于隐藏多个字符串并显示具有相同标识符的第一行的C#SQL查询

作者:互联网

我正在尝试使用C#中的datagrid创建一个报告,它将显示多个数据,但如果它们在表中具有相同的值,则会隐藏标识符.

结果应该是这样的

这是我在数据库中获取数据时的代码和查询.

//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 Date=@Date";
        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;

先感谢您.

解决方法:

拥有SQL Server Management Studio 2014并不意味着SQL Server的版本是相同的,但无论如何..

在SQL Server 2012中,您可以使用LAG函数来获取“上一个”行的值. “previous”的定义取决于行的顺序,因此您需要能够以有意义的方式对它们进行排序.

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 Date=@Date
ORDER BY ColumnA, ColumnB;

通常,这种后处理是在客户端完成的(使用C#),因为最终用户通常能够按照自己喜欢的方式重新排序行.

标签:c,sql,sql-server,sql-server-2014
来源: https://codeday.me/bug/20190628/1312019.html