2013-11-07 4 views
0

У меня есть страница, показывающая все типы приложений для продукта. У меня есть вид dbo.View_Products_by_Application и таблица dbo.tblApplications.Возврат только Первый экземпляр каждого события

dbo.tblApplicaitons имеет два поля, ApplicationName & ApplicationID

dbo.View_Products_By_Application имеет всю информацию о продукте. Я хочу создать набор записей, который использует dbo.tblApplications и возвращает только имена приложений, в которых это имя приложения также появляется в представлении dbo.View_Produts_by_Application. И в возвращаемом наборе записей я хочу, чтобы каждый ApplicationName появлялся один раз.

Два элемента, которые мне нужны в моем наборе записей, это ApplicationName и ApplicationID.

SELECT * 
    FROM [WebV2].[dbo].[View_Products_By_Application] 
    INNER JOIN dbo.tblApplications 
    ON dbo.View_Products_By_Application.ApplicationName = dbo.tblApplications.ApplicationName 
    Order BY dbo.View_Products_By_Application.ApplicationName ASC 
+1

Определение "первого". –

ответ

0

Я думаю, вы можете просто сделать select distinct, чтобы получить то, что вы хотите:

SELECT distinct a.ApplicationName, a.ApplicationId 
FROM [WebV2].[dbo].[View_Products_By_Application] pba 
    INNER JOIN dbo.tblApplications a 
     ON pba.ApplicationName = a.ApplicationName 
Order BY a.ApplicationName ASC 

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

+0

Я получаю сообщение об ошибке - Msg 145, Level 15, State 1, Line 1 Элементы ORDER BY должны отображаться в списке выбора, если указан параметр SELECT DISTINCT. –

+0

@ SeanO'Connor. , , К сожалению, но неправильный псевдоним в столбце в предложении order by. –

+0

Это отлично работает. Спасибо огромное! –

0

Я не совсем понял, что у вас есть, но я думаю, что то, что вы ищете, это что-то вроде этого.

SELECT [WebV2].[dbo].[View_Products_By_Application].*, dbo.tblApplications.*, ROW_NUMBER() OVER (PARTITION BY dbo.View_Products_By_Application.ApplicationName Order BY dbo.View_Products_By_Application.ApplicationName ASC) 
As rownum 
FROM [WebV2].[dbo].[View_Products_By_Application] 
INNER JOIN dbo.tblApplications ON dbo.View_Products_By_Application.ApplicationName = dbo.tblApplications.ApplicationName 
Where rownum= 1 

Это вернет вам первое имя ApplicationName, я считаю.

http://technet.microsoft.com/en-us/library/ms186734.aspx

0

Вы можете использовать EXISTS:

SELECT app.ApplicationName, app.ApplicationID 
FROM dbo.tblApplications app 
WHERE EXISTS 
(
    SELECT * 
    FROM [WebV2].[dbo].[View_Products_By_Application] vw 
    WHERE vw.ApplicationName = app.ApplicationName 
) 
ORDER BY app.ApplicationName; 
+0

Это сработало отлично. Большое вам спасибо, я был намного усложняю то, что мне нужно было сделать, я думаю. –

+0

Допустим, мне нужно, чтобы имена приложений были возвращены в порядке ASC, есть ли простой способ сделать это? –

+0

@ SeanO'Connor: '... ORDER BY app.ApplicationName;' –

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