1

各会場の各カテゴリのステータスを取得するビューがあります。

上記のすべてを表示する必要がありますが、各会場の各カテゴリの最新のステータスのみを表示します。

一般的な考え方として、ショップ内の各アイテムにはステータスがあります。したがって、店 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
4

1 に答える 1

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
于 2013-05-22T13:39:04.803 に答える