Кросс-таблица между двумя разными таблицами - PullRequest
1 голос
/ 23 января 2012

Я застрял в проблеме, которая заключается в создании кросс-таблицы между двумя таблицами, которые не имеют прямого отношения .. Вот мои таблицы

Сотрудник - содержит данные сотрудника

Посещаемость - содержит День, Ночь, Полночь, EmpID, Дата начала

EmpWages - содержит заработную плату, FromDate

Перекрестная таблица должна быть между Таблицей посещаемости и EmpWages

Дата начала 1 ............ Дата начала N (EmpWages)
День, ночь, полночь ........... День, ночь, полночь (посещаемость)

Пожалуйста, помогите мне

1 Ответ

0 голосов
/ 26 января 2012

Вот что я сделал.

USE [FPR]
GO
/****** Object:  StoredProcedure [dbo].[GAD]    Script Date: 01/26/2012 18:38:21 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GAD]
As

DECLARE @ReportColumnNames NVARCHAR(max)
DECLARE @SQLtext NVARCHAR(max)

SELECT  @ReportColumnNames = Stuff( (

SELECT ', ' + QUOTENAME(YYYY) AS [text()]

FROM   (SELECT DISTINCT YYYY=CAST(FromDate As Date) 

FROM dbo.EmpWages ) x

ORDER BY YYYY

FOR XML PATH ('')), 1, 1, '')

SELECT @SQLtext = N'SELECT SNo=IDENTITY(int,1,1), * INTO #temp_t FROM (SELECT 
(FromDate) AS OYe, Days = (
CASE A.Day WHEN 1 THEN CAST((E.Wages) AS VARCHAR)
ELSE ''N'' END + SPACE(3) +
CASE A.Night WHEN 1 THEN CAST((E.Wages/2) AS VARCHAR) 
ELSE ''N'' END + SPACE(3) +
CASE A.FullNight WHEN 1 THEN CAST((E.Wages/2) AS VARCHAR) ELSE ''N'' END 
),

E.Name As Employee, D.Name As Department,

SUM(
W.Wages
) OVER(PARTITION BY E.Name) As [Total for Month]

FROM dbo.EmpWages W 

INNER JOIN dbo.Employee E ON
W.EmpID = E.ID

INNER JOIN dbo.Department D ON
E.DeptID = D.ID

JOIN dbo.Attendance A
ON W.EmpID = A.EmpID AND
W.FromDate = A.Date AND W.ToDate IS NULL
GROUP BY E.Name, D.Name, A.Day, A.Night, A.FullNight, A.Advance, FromDate, E.Wages, W.Wages, A.Advance

) as Header
PIVOT (Max(Days) FOR OYe IN(' + @ReportColumnNames + N')) As P1
ORDER BY 1
SELECT * FROM #temp_t 
DROP TABLE #temp_t'

execute (@SQLtext);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...