2015-03-17 3 views
0

- Я действительно не был уверен, как сформулировать заголовок запроса, поэтому не стесняйтесь изменять это! -Показать пустую строку для «необоснованных» данных данных

Цель: показать все «под-данные» в виде сетки, а также строку, показывающую, что для свойств, где нет данных, нет данных. Поэтому, если вы выполнили поиск по шаблону Property 1, и было свойство «1» с 2 строками деталей, а также свойство «11», но без каких-либо подробностей было бы три строки на datagrid (два для свойства «1» 'и один для свойства' 11 ') Строка для свойства «11» будет иметь UPRN, а затем другие строки будут иметь «Нет данных для этого UPRN»

Проблема: при поиске пользователя в сетке показаны детали из «TblAssociatedData» «однако то, что я хочу сделать, - это когда нет данных для одного из потенциальных UPRN в« TblProperty ». Я хочу вернуть строку для этого также с« Нет данных », чтобы пользователь мог видеть, что поиск действителен. собственности.

Это не проблема, когда нет данных для показа, у меня есть эта работа правильно.

Я предполагаю, что кто-то спросил об этом, но я пробовал разные фразы и поиски, но не могу найти, что мне нужно.

код я использую сейчас:

SELECT * FROM TblAssociatedData AS a 
INNER JOIN TblProperty As p 
on p.UPRN = a.UPRN 
WHERE   
a.SurveyDate between @sDateFrom and @sDateTo AND   
(a.UPRN LIKE '%' + @sUPRN + '%' or 
p.PostCode LIKE '%' + @sPostcode + '%' or 
p.ShopName LIKE '%' + @sPropertyName + '%' or 
p.Street LIKE '%' + @sStreet + '%' or 
p.Reg LIKE '%' + @sRegion + '%' or 
a.SurveyCompany LIKE '%' + @sSurveyCompany + '%') 

Не будучи в состоянии получить мою голову вокруг, как добавить следующую часть я сделал непроверенный макет, как если бы это было в .aspx странице самого к надеюсь, покажет, что мой мыслительный процесс, с точки зрения результатов, есть.

расположение кода, чтобы показать мыслительный процесс

sSQL1 = SELECT * FROM TBLProperty WHERE UPRN LIKE '%vUPRN%' 
-- select and then loop 
dsNames1 = New SqlDataSource 
dsNames1.ConnectionString = sConnString 
dsNames1.SelectCommand = sSQL1 

For Each datarow1 As Data.DataRowView In dsNames1.Select(DataSourceSelectArguments.Empty) 

Dim vCount As Int = SELECT * FROM TBLProperty WHERE UPRN LIKE "'& datarow1("UPRN") &'" 

If vCount > 0 Then 

    For Each datarow1 As Data.DataRowView In dsNames1.Select(DataSourceSelectArguments.Empty) 
     --loop through database and output i.e. 
     DateOfIssue = datarow("UPRN") 
     DateOfIssue = datarow("DateOfIssue") 
    Next 

Else 

    --put default text here 
    DateOfIssue = vUPRN 
    DateOfIssue = "-" 

End If 

По сути, когда я не получаю возврат для найденного имущества, я хочу, чтобы выводить что-то вроде ниже для UPRNs.

SELECT 'No data found.' as ColumnName1, '' as ColumnName2, '' as ColumnName3, '' as ColumnName4 
+0

Вы должны посмотреть, как использовать 'левую join'. В остальном все эти подстановочные запросы (например, 'LIKE '%' + @sUPRN + '%'' будут убивать производительность, если у вас нет очень маленьких наборов данных. И учитывая, что вы используете 'или', чтобы объединить их вместе, – TobyLL

+0

Я понимаю плохие аспекты LIKE, но, к сожалению, это необходимо в этом случае. – indofraiser

+0

Я до: Итак, если я придерживаюсь UPRN 99 и 999, используя приведенный ниже код Я получаю два UPRNS: SELECT * FROM TblProperty WHERE UPRN LIKE '% 99%' Это правильно Если я пытаюсь: ВЫБРАТЬ p.UPRN, ISNULL (a.UPRN, 'Not Found') В столбце 3 FROM TblProperty AS p LEFT JOIN Tbl AssociatedData Как на a.UPRN = p.UPRN \t ГДЕ \t \t \t a.UPRN LIKE '% 99%' Я ожидаю 14 результатов для '99', и тогда не будет ни для '999', но я хочу один, чтобы быть там. – indofraiser

ответ

1

Try:

SELECT 
    p.UPRN, 
    COALESCE(a.UPRN,'Not Found') AS Column3 
FROM TblProperty AS p 
LEFT JOIN TblAssociatedData AS a 
    ON a.UPRN = p.UPRN 
WHERE p.UPRN LIKE '%99%' 
+0

Выполнен быстрый тест, и это похоже на ответ.Я буду отмечать, как только будет протестирован. Благодаря! – indofraiser

Смежные вопросы