Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 两个不同表之间的交叉表_Sql Server_Crosstab - Fatal编程技术网

Sql server 两个不同表之间的交叉表

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 ****

我陷入了一个问题,那就是在两个没有直接关系的表之间创建交叉表

员工-包含员工数据

考勤-包括白天、夜间、午夜、EmpID、起始日期

EmpWages-包含工资,起始日期

考勤表和工资表之间应使用交叉选项卡

从日期1开始………从日期N开始 白天、夜晚、午夜…………白天、夜晚、午夜出勤

请帮帮我这是我做的

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