2016-09-02 3 views
0

私は3つのテーブル:tblEmpData,tblEmpAttDeviceおよびtblEmpAttDeviceUsersを持っています。複数のテーブルから単一のSQLクエリを使用してhMatrixビューを作成する

tblEmpDataにはすべての従業員が含まれ、tblEmpAttDeviceにはすべての出席者が含まれ、tblEmpAttDeviceUsersには特定のデバイスIDの従業員が出席しています。

テーブルスキーマ:

tblEmpData

[ID] [int] IDENTITY(1,1) NOT NULL, 
    [EmpID] [int] NOT NULL, 
    [EmpName] [varchar](255) NOT NULL, 
    [EmpCivilID] [varchar](100) NULL, 
    [EmpCivilIDExp] [date] NULL, 
    [EmpHourWageKD] [varchar](20) NULL, 
    [EmpPhone] [varchar](50) NULL, 
    [EmpDOB] [date] NULL, 
    [EmpJoinDate] [date] NULL, 
    [EmpType] [varchar](10) NULL, 
    [EmpEmail] [varchar](255) NULL, 
    [EmpAddress] [varchar](255) NULL, 
    [EmpPassword] [varchar](255) NULL, 
    [EmpEnabled] [int] NULL, 
    [EmpDeviceID] [int] NULL, 
    [EmpCompanyHired] [int] NOT NULL DEFAULT ((1)), 
    [EmpVenueID] [int] NULL, 
    [EmpStatusID] [int] NULL, 
    [DriversLicenseNo] [varchar](100) NULL, 
    [DriversLicenseExpiry] [date] NULL 

tblEmpAttDevice

[DeviceID] [int] NOT NULL, 
    [DeviceName] [varchar](50) NULL, 
    [DeviceIP] [varchar](50) NOT NULL, 
    [DevicePort] [int] NOT NULL, 
    [VenueID] [int] NOT NULL, 
    [EventID] [int] NOT NULL, 
    [LastImport] [datetime] NULL, 
    [ACTIVE_FLAG] [bit] NULL 

tblEmpAttDeviceUsers

[EmpID] [int] NULL, 
    [DeviceID] [int] NULL, 
    [lastseen] [datetime] NULL, 
    [action] [int] NULL 

次のビューを生成するためにSQLクエリを作成します。 tblEmpAttDeviceテーブルの

enter image description here

すべての行が列になって、任意の従業員IDは、tblEmpAttDeviceUsersその後、Y、他のN.

私はこれを行うことができますどのように段階を遮断するには午前中に存在する場合は、マトリックスを作成します。 SQL Serverでクエリを作成するのを手伝ってください。ありがとう

答えて

1

この状況ではPIVOTを使用できます。

下記のスクリプトを試してみてください。

SELECT EmpID,EmpName,Emp_Enabled,Employment_status 
    ,CASE WHEN [Kuwait Soft]>0 THEN 'Y' ELSE 'N' END [Kuwait Soft] 
    ,CASE WHEN [Avenues]>0 THEN 'Y' ELSE 'N' END [Avenues] 
    ,CASE WHEN[360 Mall]>0 THEN 'Y' ELSE 'N' END [360 Mall] 
    ,CASE WHEN [AlHarma]>0 THEN 'Y' ELSE 'N' END [AlHarma] 
    ,CASE WHEN [Sidra]>0 THEN 'Y' ELSE 'N' END [Sidra] 
    ,CASE WHEN[Symphony]>0 THEN 'Y' ELSE 'N' END [Symphony] 

FROM 
(SELECT a.EmpID, a.EmpID EmployeeID,a.EmpName 
     ,a.EmpEnabled Emp_Enabled,a.EmpStatusID Employment_status,c.DeviceName 
FROM tblEmpData a 
JOIN tblEmpAttDeviceUsers b on a.EmpID=b.EmpID 
JOIN tblEmpAttDevice c on b.DeviceID=c.DeviceID) src 
PIVOT (MAX([EmployeeID]) for [DeviceName] IN ([Kuwait Soft],[Avenues],[360 Mall],[AlHarma],[Sidra],[Symphony]))as Res; 

出力:

enter image description here

関連する問題