Я не уверен, что это возможно с помощью SQL-запроса, но я отдам ему все.Несколько результатов для одного поля в объединенном SQL-запросе
Я занимаюсь разработкой веб-части SharePoint на C#, которая подключается к базе данных SQL и запускает запрос, а затем привязывает данные, которые приводят к gridview. Он работает нормально, но у меня небольшая загвоздка. По большей части мой запрос вернет ровно один результат для каждого поля. Я отображаю информацию по вертикали, поэтому она выглядит примерно так:
Customer Name Mr. Customer
Customer Address 980 Whatever St.
Customer City Tallahassee
Все отображается нормально. Однако одна из таблиц в базе данных почти всегда возвращает несколько результатов. В нем перечислены различные типы материалов, используемых для разных продуктов, поэтому схема отличается тем, что, хотя у каждого клиента, очевидно, будет одно имя, один адрес, один город и т. Д., У всех их будет хотя бы один продукт, и этот продукт будет иметь менее одного материала. Если бы я, чтобы отобразить эту информацию о себе, это будет выглядеть примерно так:
Product Steel Type Wood Type Paper Type
-----------------------------------------------------------------------------
Widget Thick Oak Bond
Whatsit Thin Birch
Thingamabob Oak Cardstock
В идеале, я полагаю, что конечный результат будет что-то вроде:
Customer Name Mr. Customer
Customer Address 980 Whatever St.
Customer City Tallahassee
Widget Steel Thick
Widget Wood Oak
Widget Paper Bond
Whatsit Steel Thin
Whatsit Wood Birch
Thingamabob Wood Oak
Thingamabob Paper Cardstock
Другой приемлемый результат может быть что-то как следующий, добавив несколько столбцов, но возвращает только несколько результатов для этих полей:
Customer Name Mr. Customer
Customer Address 980 Whatever St.
Customer City Tallahassee
Product Steel Type Wood Type Paper Type
Widget Thick Oak Bond
Whatsit Thin Birch
Thingamabob Oak
Я открыт для любых предложений. Я бы хотел включить это в набор результатов без отдельного запроса, если это возможно. Вот код, который я использую, чтобы вытащить данные:
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds, "Specs");
DataSet flipped_ds = FlipDataSet(ds);
DataView dv = flipped_ds.Tables[0].DefaultView;
GridView outputGrid = new GridView();
outputGrid.ShowHeader = false;
outputGrid.DataSource = dv;
outputGrid.DataBind();
Controls.Add(outputGrid);
Я бы перечислил свой SQL-запрос, но он огромен. Сейчас я занимаюсь более ста полей, с большим количеством форматирования и конкатенации SUBSTRING, поэтому это будет пустой тратой пространства, но это действительно простой запрос, когда я выбираю поля с инструкцией AS, чтобы получить имена, которые я хочу, и используя несколько LEFT JOINs, чтобы вытащить нужные мне данные без нескольких запросов. Схема таблицы продукта/материала что-то вроде этого:
fldMachineID
fldProductType
fldSteel
fldWood
fldPaper
Так, очевидно, каждый клиент имеет несколько записей, по одному для каждого различного значения fldProductType. Если я ничего не выкину, я могу добавить его. Спасибо за все время и помощь!
Какая база данных вы используете, и как вы ожидаете возвращения этих значений? –
Я не уверен, что понимаю. Как бы то ни было, мне кажется, что все, что вам нужно сделать, это добавить LEFT JOIN. Но из вашего вопроса очевидно, что вы знаете о LEFT JOINS, так что это не может быть так просто. Это возвращает меня к «Я не уверен, что понимаю». Возможно, добавление ожидаемого результата позволит прояснить ситуацию. –
Я использую SQL Server 2005. Я отредактировал исходный вопрос, чтобы лучше отразить мои желаемые результаты. Теперь, когда я это сделал, я уверен, что вы увидите, что добавление другого LEFT JOIN теперь даст мне несколько наборов результатов (по одному для каждого результата в fldProductType), но в контексте datagrid мне действительно нужен только один столбец названий типов данных и второго столбца результатов. –