2016-02-02 59 views
0

我有這個數據庫表。將行轉換爲列並在SQL Server中組合兩個數據庫表

dbo.tblSites 

| Site_Code | Site Name | 
    A   Aaaaaa 
    B   Bbbbbb 
    C   Cccccc 
    D   Dddddd 

而這是其他表

dbo.Server 
| Site_Code | ServerName | Status |   Timestamp  | 
     A   QQQ  OK  01/02/2016 10:00:00.000 
     A   QQQ  OK  01/02/2016 10:00:03.000 
     A   QQQ  Critical 01/02/2016 10:00:05.000 
     A   WWW  Critical 01/02/2016 10:00:02.000 
     A   WWW  Critical 01/02/2016 10:00:05.000 
     A   WWW  OK  01/02/2016 10:00:06.000 
     A   EEE  OK  01/02/2016 10:00:05.000 
     A   EEE  OK  01/02/2016 10:00:07.000 
     A   EEE  Critical 01/02/2016 10:00:08.000 
     B   QQQ  OK  01/02/2016 10:00:00.000 
     B   QQQ  OK  01/02/2016 10:00:03.000 
     B   QQQ  Critical 01/02/2016 10:00:05.000 
     B   WWW  Critical 01/02/2016 10:00:02.000 
     B   WWW  Critical 01/02/2016 10:00:05.000 
     B   WWW  OK  01/02/2016 10:00:06.000 
     B   EEE  OK  01/02/2016 10:00:05.000 
     B   EEE  OK  01/02/2016 10:00:07.000 
     B   EEE  OK  01/02/2016 10:00:08.000 

我需要讓所有的sitecodes並把它作爲列 我還需要列下將服務器的「最新」狀態

| ServerName | SiteCode-A | SiteCode-B | SiteCode-C | SiteCode-D | 
    QQQ  Critical  Critical  No Data Found No Data Found 
    WWW   OK   OK  No Data Found No Data Found 
    EEE  Critical  OK  No Data Found No Data Found 

回答

1

可以使用dynamic crosstab做到這一點:

SQL Fiddle

DECLARE @sql NVARCHAR(MAX) = '' 

SELECT @sql = 
'SELECT 
    ServerName' + CHAR(10) 

SELECT @sql = @sql + 
' , ISNULL(MAX(CASE WHEN Site_Code = ''' + Site_Code + '''THEN Status END), ''No Data Found'') AS ' + QUOTENAME('SiteCode-'+Site_Code) + CHAR(10) 
FROM tblSites 
ORDER BY Site_Code 

SELECT @sql = @sql + 
'FROM (
    SELECT *, rn = ROW_NUMBER() OVER(PARTITION BY Site_Code, ServerName ORDER BY Timestamp DESC) 
    FROM [Server] 
) t 
WHERE rn = 1 
GROUP BY ServerName 
ORDER BY ServerName' 

PRINT @sql 
EXEC sp_executesql @sql 
+0

我對Dynamic Crosstab不熟悉,如果我嘗試將它放入SQL Server中,那麼單引號是相關的嗎? – Elphrian

+0

當我在SQL Server上寫下「我無法爲本地變量分配一個默認值」時,也出現錯誤。另一個是「必須聲明標量變量」@sql「。」 – Elphrian

+1

我明白了。謝謝@Felix。我已經配置了代碼。非常感謝 – Elphrian

相關問題