2013-05-22 46 views
1

我有一個視圖,可以獲取每個場地的每個類別的狀態。從另一個表的foreach值中選擇不同的

我需要顯示上述所有內容,但只顯示每個場地每個類別的最新狀態。

一般的想法可能是,對於店鋪中的每件商品,都有一種狀態。所以對於黃瓜,字母西紅柿在店A,狀態將是好好壞分別。店鋪B,C等也一樣。現在這些狀態可以隨時更新 - 但只有最新的更新纔會顯示。而不只是最新

SELECT 
     dbo.vwVenues.HospitalID 
    , dbo.vwVenues.Hospital AS hospitalName 
    , dbo.tblVenueStatus.id AS statusId 
    , dbo.tblVenueStatusName.statusName 
    , dbo.tblVenueStatusCategories.categoryName 
    , dbo.tblVenueStatus.dateAdded AS statusDateAdded 
    , dbo.tblVenueStatus.loggedBy AS statusLoggedBy 
    , dbo.tblVenueStatusNotes.noteContent 
    , dbo.tblVenueStatusNotes.dateAdded AS noteDateAdded 
    , dbo.tblVenueStatusNotes.removed AS noteRemoved 
    , dbo.tblVenueStatus.resolved AS statusResolved 
    , dbo.tblVenueStatus.resolveDate AS statusResolveDate 
    , dbo.tblVenueStatus.removed AS statusRemoved 
    , dbo.tblVenueStatus.dateRemoved AS statusRemovedDate 
    , dbo.tblVenueStatus.categoryId 
FROM 
    dbo.tblVenueStatusName 
    RIGHT OUTER JOIN dbo.tblVenueStatusNotes 
    RIGHT OUTER JOIN dbo.tblVenueStatus 
    ON dbo.tblVenueStatusNotes.id = dbo.tblVenueStatus.noteId 
    LEFT OUTER JOIN dbo.tblVenueStatusCategories 
    ON dbo.tblVenueStatus.categoryId = dbo.tblVenueStatusCategories.id 
    ON dbo.tblVenueStatusName.id = dbo.tblVenueStatus.statusNameId 
    FULL OUTER JOIN dbo.vwVenues 
    ON dbo.tblVenueStatus.venuId = dbo.vwVenues.HospitalID 

我得到的所有場館,但我得到所有的狀態對每個類別:

我試圖創建一個視圖,如以下。即使試圖說出正確的問題也很困難 - 所以我目前的搜索一無所獲。

任何人都可以請幫忙嗎? 編輯

CREATE TABLE [dbo].[tblVenueStatus](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [statusNameId] [int] NOT NULL, 
    [venuId] [int] NOT NULL, 
    [categoryId] [int] NOT NULL, 
    [loggedBy] [nvarchar](50) NOT NULL, 
    [noteId] [int] NOT NULL, 
    [dateAdded] [datetime] NOT NULL, 
    [resolved] [tinyint] NOT NULL, 
    [resolveDate] [datetime] NULL, 
    [removed] [tinyint] NOT NULL, 
    [dateRemoved] [datetime] NULL, 
CONSTRAINT [PK_tblSiteVenuStatus] PRIMARY KEY CLUSTERED 

CREATE TABLE [dbo].[tblVenueStatusCategories](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [categoryName] [nvarchar](50) NOT NULL, 
    [categoryDescription] [nvarchar](150) NULL, 
CONSTRAINT [PK_tblVenueStatusCategories] PRIMARY KEY CLUSTERED 

CREATE TABLE [dbo].[tblVenueStatusName](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [statusName] [nvarchar](50) NOT NULL, 
    [statusDescription] [nchar](150) NULL, 
CONSTRAINT [PK_tblVenuStatusName] PRIMARY KEY CLUSTERED 

CREATE TABLE [dbo].[tblVenueStatusNotes](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [noteContent] [nvarchar](500) NULL, 
    [dateAdded] [datetime] NOT NULL, 
    [removed] [tinyint] NOT NULL, 
    [dateRemoved] [datetime] NULL, 
CONSTRAINT [PK_tblVenueStatusNotes] PRIMARY KEY CLUSTERED 

所需的輸出將是:

Venu Name | Category 1 Status | Category 2 Status 
+0

簡化查詢並以表格形式爲源記錄和所需輸出提供示例數據。這可能會幫助你更快地獲得幫助。 – peterm

+0

我懷疑我能簡化一個只能得到我需要的查詢。如果我拿走任何東西,它可能會拋出任何正確的答案。我會用剩下的建議更新我的問題。 – TheGeekZn

+0

@Devart - 我複製粘貼查詢...這裏沒有錯誤。 – TheGeekZn

回答

1

嘗試這樣的事情。這很大程度上是因爲你說你需要在你的樣本中看到的東西。試試這個,讓我知道它是否有幫助。您可以在此添加您需要的其他欄目,它爲每家醫院提供每個類別的最新狀態,並將所有醫院和類別顯示在易讀的網格中。

SELECT * FROM   
(
    SELECT VwV.HospitalID, vwV.Hospital, ISNULL(vStatusName.statusName, '') AS statusName, vStatusCategories.categoryName 
    FROM    
    (
     SELECT topStatus.HospitalID, topStatus.categoryId, sta2.id 
     FROM    
     (
      SELECT HospitalID, categoryId, MAX(sta.dateAdded) AS DateAdded 
      FROM vwVenues 
      INNER JOIN tblVenueStatus sta ON sta.venuId = dbo.vwVenues.HospitalID 
      GROUP BY HospitalID, categoryId 
     ) topStatus 
     INNER JOIN tblVenueStatus sta2 ON sta2.dateAdded = topStatus.DateAdded AND sta2.venuId = topStatus.HospitalID) Statuss 
     FULL OUTER JOIN vwVenues vwV ON vwV.HospitalID = Statuss.HospitalID 
     LEFT OUTER JOIN tblVenueStatus vStatus ON vStatus.id = Statuss.id 
     LEFT OUTER JOIN tblVenueStatusName vStatusName ON vStatusName.id = vStatus.statusNameId 
     LEFT OUTER JOIN tblVenueStatusCategories vStatusCategories ON vStatus.categoryId = vStatusCategories.id AND vStatusName.id = vStatus.statusNameId 
     LEFT OUTER JOIN tblVenueStatusNotes vStatusNotes ON vStatusNotes.id = vStatus.noteId 
) AS s  
PIVOT (MIN(StatusName) 
FOR [CategoryName] IN ([Category1],[Category2])) AS PTbl 
+0

謝謝,完美無缺! :D – TheGeekZn

+0

您的縮進可能會使用一些工作... – Dukeling

+0

對不起,我在我的手機上輸入了有用的答案並不符合您的標準。 –

相關問題