Sql server 两个不同表之间的交叉表
我陷入了一个问题,那就是在两个没有直接关系的表之间创建交叉表 员工-包含员工数据 考勤-包括白天、夜间、午夜、EmpID、起始日期 EmpWages-包含工资,起始日期 考勤表和工资表之间应使用交叉选项卡 从日期1开始………从日期N开始 白天、夜晚、午夜…………白天、夜晚、午夜出勤 请帮帮我这是我做的Sql server 两个不同表之间的交叉表,sql-server,crosstab,Sql Server,Crosstab,我陷入了一个问题,那就是在两个没有直接关系的表之间创建交叉表 员工-包含员工数据 考勤-包括白天、夜间、午夜、EmpID、起始日期 EmpWages-包含工资,起始日期 考勤表和工资表之间应使用交叉选项卡 从日期1开始………从日期N开始 白天、夜晚、午夜…………白天、夜晚、午夜出勤 请帮帮我这是我做的 USE [FPR] GO /****** Object: StoredProcedure [dbo].[GAD] Script Date: 01/26/2012 18:38:21 ****
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);
你的问题不清楚。我还怀疑结果可能过于宽泛。请详细说明你已经尝试过什么,有什么特别的困难。另外,请为您的问题添加一些示例:示例数据和基于这些数据的预期输出。为什么不创建一个视图并将其用于PIVOT?Thnx alot Andriy M&BartekR和+1000 for=>BartekR