Объединенные таблицы, кроме пустых записей (ноль) - PullRequest
0 голосов
/ 27 июня 2019

У меня есть две таблицы (отношение 1-N).

First (идентификатор, имя, фамилия),

Second (идентификатор, должность (и), роль,общество).

В моем приложении я хочу объединить table1 и table2 (основываясь на идентификаторе, который связывает две таблицы), НО я хочу скрыть столбцы, которые МОГУТ быть пустыми.

Пример:join (в данном случае я не хочу показывать 'ruolo / grado')

Как я написал код для этого:

CREATE PROCEDURE spEstraiPbyId
    @Id int 
    as
    begin
    SELECT * from Persone  
    join Lavori on Persone.Id = @Id and Lavori.IdPersona=@Id
    end

PS: я уже виделнесколько похожих вопросов в интернете, но ни один ответ не смог удовлетворить мою просьбу, или я не правильно понял.Я надеюсь, что вы можете помочь мне охотно.

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Спасибо всем.Лучший совет был написан @Serg, потому что для этого я работал на стороне клиента, с DataReader и Datatable objs:

 DataTable tbl = new DataTable()    
SqlCommand cmd = new SqlCommand("spEstraiPById", cnn); //See at the end for spEstraiPById
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("Id",txtNickname.Text);
                    using (SqlDataReader rdr = cmd.ExecuteReader())
                    { //Add columns to the table
                        tbl.Columns.Add("ID");
                        tbl.Columns.Add("Nome");
                        tbl.Columns.Add("Cognome");
                        tbl.Columns.Add("Residenza");
                        tbl.Columns.Add("Professione");
                        tbl.Columns.Add("Ruolo");
                        tbl.Columns.Add("Società");

                        while (rdr.Read())
                        { //from DB to Table
                            DataRow drw = tbl.NewRow();
                            drw["ID"] = rdr["Id"];
                            drw["Nome"] = rdr["Nome"];
                            drw["Cognome"] = rdr["Cognome"];
                            drw["Residenza"] = rdr["Residenza"];
                            drw["Professione"] = rdr["Professione"];
                            drw["Ruolo"] = rdr["Ruolo/Grado"];
                            drw["Società"] = rdr["Società"];
                            tbl.Rows.Add(drw);
                        }
                        foreach (DataRow row in tbl.Rows) //Deleting empty records
                        {
                            for (int col = tbl.Columns.Count - 1; col >= 0; col--)
                            {
                                if (row.IsNull(col))
                                {
                                    tbl.Columns.RemoveAt(col);
                                }
                            }
                            // No need to continue if we removed all the columns
                            if (tbl.Columns.Count == 0)
                                break;
                        }
                    }
                        gw1.DataSource = tbl;
                        gw1.DataBind();
                        cnn.Close();
//=Stored Procedure 
CREATE PROCEDURE spEstraiPbyId
    @Id int 
    as
    begin
    SELECT * from Persone 
    join Lavori on Persone.Id = @Id and Lavori.IdPersona=@Id
    end
0 голосов
/ 27 июня 2019

Если я правильно понимаю, вы хотите сделать что-то вроде этого: http://sqlfiddle.com/#!18/04141/3

SELECT * from Persone  
join Lavori on Persone.Id = Lavori.IdPersona where Lavori.Job is not null

Сначала используйте комбинацию клавиш при соединении, а затем отфильтруйте с помощью где те, которые не равны нулю:)

...