2016-02-02 3 views
0

У меня есть эта таблица базы данных 3Комбинирование 3 таблицы в SQL Server

tblSites 
| Sites | SiteName | 
    AA  AaaaaaaA 
    BB  BaaaaaaB 
    CC  CaaaaaaC 
    DD  DaaaaaaD 

tblWeb 
| WebID | AppName | AppUrl | ServerName | 
    1  aWeb  www.aWeb.com ServerA 
    1  bWeb  www.bWeb.com ServerA 
    1  cWeb  www.cWeb.com ServerB 
    1  dWeb  www.dWeb.com ServerA 
    1  eWeb  www.eWeb.com ServerC 
    1  fWeb  www.fWeb.com ServerC 
    1  gWeb  www.gWeb.com ServerD 
    1  hWeb  www.hWeb.com ServerD 

tblWebServices 
| Sites | WebID | SummaryState |  Last_Check  | 
    A  1   OK   02/01/2016 10:00:00.000 
    A  1  Critical  02/01/2016 10:00:04.000 
    A  2   OK   02/01/2016 10:00:04.000 
    A  2  Critical  02/01/2016 10:00:06.000 
    A  3   OK   02/01/2016 10:00:07.000 
    A  3   OK   02/01/2016 10:00:09.000 
    A  4   OK   02/01/2016 10:00:10.000 
    A  4   OK   02/01/2016 10:00:12.000 
    A  5  Critical  02/01/2016 10:00:14.000 
    A  5   OK   02/01/2016 10:00:17.000 
    A  6   OK   02/01/2016 10:00:20.000 
    A  6   OK   02/01/2016 10:00:23.000 
    A  7   OK   02/01/2016 10:00:25.000 
    A  7  Critical  02/01/2016 10:00:36.000 
    A  8   OK   02/01/2016 10:00:39.000 
    A  8   OK   02/01/2016 10:00:40.000 
    B  1  Critical  02/02/2016 10:00:00.000 
    B  1   OK   02/02/2016 10:00:04.000 
    B  2  Critical  02/02/2016 10:00:04.000 
    B  2   OK   02/02/2016 10:00:06.000 
    B  3  Critical  02/02/2016 10:00:07.000 
    B  3  Critical  02/02/2016 10:00:09.000 
    B  4  Critical  02/02/2016 10:00:10.000 
    B  4  Critical  02/02/2016 10:00:12.000 
    B  5   OK   02/02/2016 10:00:14.000 
    B  5  Critical  02/02/2016 10:00:17.000 
    B  6  Critical  02/02/2016 10:00:20.000 
    B  6  Critical  02/02/2016 10:00:23.000 
    B  7  Critical  02/02/2016 10:00:25.000 
    B  7   OK   02/02/2016 10:00:36.000 
    B  8  Critical  02/02/2016 10:00:39.000 
    B  8  Critical  02/02/2016 10:00:40.000 

Это таблица 3 базы данных. tblWeb.WebID = tblWebServices.WebID

И мне нужно, чтобы получить AppName из tblWeb и конвертировать сайты tblSites в колонке , а также под сайты должны быть «Последняя» Резюме Состояние APPNAME в tblWebServices и все сайты, которые не имеет данных, должны быть помечены как «нет данных»

Ожидаемый результат таков:

Expected Output: 

| AppName | Site-AA | Site-BB |  Site-CC  |  Site-DD  | 
    aWeb  Critical  OK   No Data Found  No Data Found 
    bWeb  Critical  OK   No Data Found  No Data Found 
    cWeb   OK  Critical  No Data Found  No Data Found 
    dWeb   OK  Critical  No Data Found  No Data Found 
    eWeb   OK  Critical  No Data Found  No Data Found 
    fWeb   OK  Critical  No Data Found  No Data Found 
    gWeb  Critical  OK   No Data Found  No Data Found 
    hWeb   OK  Critical  No Data Found  No Data Found 

Это мой желаемый результат. Я уже ищу все примеры и вопросы здесь, но мне ничего не кажется. Может кто-нибудь помочь мне настроить некоторые коды в SQL Server относительно этого вывода.

Это коды, которые я устанавливаю некоторые ответы в этой задаче

DECLARE @sql NVARCHAR(MAX) 
SET @sql = '' 
SELECT @sql = 'SELECT WebID ' + CHAR(10) 
SELECT @sql = @sql + ' , ISNULL(MAX(CASE WHEN Sites = ''' + Sites + '''THEN summary_state END), ''No Data Found'') AS ' + QUOTENAME('Site-'+Sites) + CHAR(10) 
FROM tblSites 
ORDER BY Sites 
SELECT @sql = @sql + 'FROM (SELECT *, rn = ROW_NUMBER() OVER(PARTITION BY Sites , WebID ORDER BY Last_Check DESC) FROM tblWebServices) t WHERE rn = 1 GROUP BY WebID ORDER BY WebID ' 
PRINT @sql 
EXEC sp_executesql @sql 

Выходной сигнал этого кодов, как это

| WebID | Site-AA | Site-BB |  Site-CC  |  Site-DD  | 
    1  Critical  OK   No Data Found  No Data Found 
    2  Critical  OK   No Data Found  No Data Found 
    3   OK  Critical  No Data Found  No Data Found 
    4   OK  Critical  No Data Found  No Data Found 
    5   OK  Critical  No Data Found  No Data Found 
    6   OK  Critical  No Data Found  No Data Found 
    7  Critical  OK   No Data Found  No Data Found 
    8   OK  Critical  No Data Found  No Data Found 

Я не нуждался в WEBID присутствовать. Мне нужно AppName. Пожалуйста, помогите мне с этим Ваш комментарий и ответ будут большой помощью.

+0

У вас есть фиксированное количество 'сайта-code' –

+0

No. Там нет фиксированного количества сайтов-коды есть вероятность того, что есть дополнительный – Elphrian

ответ

0

Кажется, единственная разница между тем, что вы хотите, и тем, что вы получаете, - это то, что вы хотите использовать имя приложения, но получаете идентификатор приложения, поэтому просто выберите имя приложения вместо идентификатора приложения.

Select application_name, 
MAX(CASE WHEN site-code = 'MK' Then MaxRoundTrip else NULL end) as [summaryMK], 
MAX(CASE WHEN site-code = 'MK' and timestamp=MaxRoundTrip then [summary-state] else NULL end) as [timestampMK], 
MAX(CASE WHEN site-code = 'MV' Then MaxRoundTrip else NULL end) as [summaryMV], 
MAX(CASE WHEN site-code = 'MV' and timestamp=MaxRoundTrip then [summary-state] else NULL end) as [timestampMV] 
from (select *, MAX(timestamp) Over(Partition by web_apps_id, site-code) as maxroundtrip from tblServices) tblServices 
group by application_name 
+0

Он пришел из другой таблицы. Вот почему я не могу поставить имя приложения непосредственно при выборе – Elphrian

+0

Я уже обновляю свои вопросы. @Alon – Elphrian

0

Вы можете присоединиться к своим столам и получить имя приложения.

Select 
Web.application_name 
MAX(CASE WHEN site-code = 'MK' Then MaxRoundTrip else NULL end) as [summaryMK], 
MAX(CASE WHEN site-code = 'MK' and timestamp=MaxRoundTrip then [summary-state] else NULL end) as [timestampMK], 
MAX(CASE WHEN site-code = 'MV' Then MaxRoundTrip else NULL end) as [summaryMV], 
MAX(CASE WHEN site-code = 'MV' and timestamp=MaxRoundTrip then [summary-state] else NULL end) as [timestampMV] 
    from 
    (select 
     *, 
     MAX(timestamp) Over(Partition by web_apps_id, site-code) 
as maxroundtrip 
    from tblServices) tblServices Service 
left join tblWeb Web on Service.web_apps_id= Web.web_apps_id 
group by web_apps_id 
Смежные вопросы