2017-04-25 96 views
4

我有3个表作为注册,修订,问题。表的结构和一些DATAS如下,SQL查询与多个PIVOT

CREATE TABLE [dbo].[Issue](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [ProjectID] [int] NULL, 
    [Drawing ID] [int] NULL, 
    [Revision ID] [int] NULL, 
    [Issue Number] [int] NULL, 
    [Weight1] [float] NULL, 
    [Weight2] [float] NULL, 
    [Weight3] [float] NULL, 
CONSTRAINT [PK_DrawingIssue] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

CREATE TABLE [dbo].[Register](
    [ID] [int] NOT NULL, 
    [ProjectID] [int] NULL, 
    [Number] [nvarchar](255) NULL, 
CONSTRAINT [PK_Drawing_Register] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 

CREATE TABLE [dbo].[Revision](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [ProjectID] [int] NULL, 
    [Drawing ID] [int] NULL, 
    [Revision] [nvarchar](255) NULL, 
    [SDate] [datetime] NULL, 
    [EDate] [datetime] NULL, 
CONSTRAINT [PK_DrawingRevision] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

GO 
SET IDENTITY_INSERT [dbo].[Issue] ON 

GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (9, 23, 3, 5, 2, 12, NULL, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (10, 23, 4, 6, 9, NULL, 32, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (19, 23, 7, 12, 2, 24, NULL, 24) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (164, 23, 12, 61, 2, NULL, NULL, 42) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (165, 23, 13, 62, 1, 24, NULL, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (167, 23, 13, 62, 0, NULL, 42, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (168, 23, 13, 62, 2, NULL, 43, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (169, 23, 13, 64, 0, NULL, NULL, 24) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (170, 23, 13, 64, 1, NULL, 42, 42) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (171, 23, 13, 64, 3, NULL, 24, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (254, 23, 5, 86, 4, 24, NULL, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (256, 23, 13, 88, 2, 24, NULL, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (257, 23, 13, 89, 1, NULL, 24, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (258, 23, 13, 64, 2, 8, 7, 6) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (259, 23, 16, 91, 1, NULL, 4, 6) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (260, 23, 16, 91, 2, NULL, NULL, 4) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (297, 2, 17, 108, 1, NULL, 7, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (298, 2, 17, 108, 2, NULL, 68, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (299, 2, 17, 108, 6, 67, NULL, 86) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (300, 2, 17, 109, 2, NULL, 68, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (301, 2, 17, 109, 1, NULL, NULL, 68) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (302, 2, 17, 109, 3, 68, NULL, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (303, 2, 17, 110, 1, NULL, 86, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (304, 2, 17, 110, 2, 68, NULL, 68) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (305, 2, 17, 110, 7, NULL, 68, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (306, 2, 17, 110, 8, NULL, NULL, 68) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (307, 2, 17, 110, 6, NULL, 68, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (308, 23, 18, 111, 1, 68, NULL, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (309, 23, 19, 112, 1, NULL, 68, 8) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (310, 23, 20, 113, 1, NULL, 6, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (311, 23, 21, 114, 1, 3, NULL, 68) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (312, 23, 22, 115, 1, NULL, 5, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (313, 23, 23, 116, 1, NULL, 4, 34) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (314, 23, 24, 117, 1, 5, 46, 436) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (315, 23, 25, 118, 1, NULL, NULL, 6) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (316, 23, 26, 119, 1, 46, 45, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (317, 23, 27, 120, 1, NULL, 6, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (318, 23, 28, 121, 1, NULL, NULL, 4) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (319, 23, 29, 122, 1, NULL, 45, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (320, 23, 30, 123, 1, 36, NULL, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (321, 26, 31, 124, 1, NULL, 36, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (322, 26, 32, 125, 1, 36, NULL, 36) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (323, 26, 33, 126, 1, NULL, 36, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (324, 26, 34, 127, 1, NULL, NULL, 36) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (325, 26, 35, 128, 1, 36, NULL, 45) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (326, 2, 36, 129, 1, NULL, 36, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (327, 26, 37, 130, 1, NULL, NULL, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (328, 2, 38, 131, 1, NULL, 7, NULL) 
GO 
INSERT [dbo].[Issue] ([ID], [ProjectID], [Drawing ID], [Revision ID], [Issue Number], [Weight1], [Weight2], [Weight3]) VALUES (329, 23, 39, 132, 1, NULL, 56, NULL) 
GO 
SET IDENTITY_INSERT [dbo].[Issue] OFF 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (3, 23, N'1') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (4, 23, N'7') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (7, 23, N'3333') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (12, 23, N'D1') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (13, 23, N'DT1') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (16, 23, N'Dwg1') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (17, 2, N'D1') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (18, 23, N'23') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (19, 23, N'983') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (20, 23, N'100') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (21, 23, N'11112') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (22, 23, N'555') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (23, 23, N'666666') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (24, 23, N'77') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (25, 23, N'88') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (26, 23, N'99') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (27, 23, N'2') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (28, 23, N'3') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (29, 23, N'4') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (30, 23, N'Dwg12345') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (31, 26, N'1') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (32, 26, N'2') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (33, 26, N'3') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (34, 26, N'4') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (35, 26, N'5') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (36, 2, N'DT123') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (37, 26, N'DTApr04') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (38, 2, N'DTApr05') 
GO 
INSERT [dbo].[Register] ([ID], [ProjectID], [Number]) VALUES (39, 23, N'DTA05') 
GO 
SET IDENTITY_INSERT [dbo].[Revision] ON 

GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (5, 23, 3, N'0', CAST(N'2017-04-21 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (6, 23, 4, N'0', NULL, CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (12, 23, 7, N'3', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (61, 23, 12, N'0', NULL, CAST(N'2017-04-10 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (62, 23, 13, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), CAST(N'2017-04-08 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (64, 23, 13, N'1', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (88, 23, 13, N'1', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (89, 23, 13, N'2', NULL, CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (90, 23, 13, N'1', CAST(N'2017-04-18 00:00:00.000' AS DateTime), CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (91, 23, 16, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (108, 2, 17, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (109, 2, 17, N'1', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (110, 2, 17, N'2', NULL, CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (111, 23, 18, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (112, 23, 19, N'0', NULL, CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (113, 23, 20, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (114, 23, 21, N'0', NULL, CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (115, 23, 22, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (116, 23, 23, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (117, 23, 24, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (118, 23, 25, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (119, 23, 26, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (120, 23, 27, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (121, 23, 28, N'0', NULL, CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (122, 23, 29, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (123, 23, 30, N'0', NULL, CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (124, 26, 31, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (125, 26, 32, N'0', NULL, CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (126, 26, 33, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (127, 26, 34, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (128, 26, 35, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (129, 2, 36, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (130, 26, 37, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (131, 2, 38, N'0', NULL, CAST(N'2017-04-18 00:00:00.000' AS DateTime)) 
GO 
INSERT [dbo].[Revision] ([ID], [ProjectID], [Drawing ID], [Revision], [SDate], [EDate]) VALUES (132, 23, 39, N'0', CAST(N'2017-04-18 00:00:00.000' AS DateTime), NULL) 
GO 
SET IDENTITY_INSERT [dbo].[Revision] OFF 
GO 

我需要一个查询,这将每绘制其通过REVID(修订表)的内容描述分组与最新4问题然后通过发行ID DESC返回一行(问题表)它需要选择顶部4记录每个附图和所有四个记录都与枢轴像组合在一起,

DNo | ISsue1 | Issue2 | Issue3 | Issue4 | SDate1 | SDate2 | SDate3 | Sdate4 | EDate1 | EDate2 | EDate3 | EDate4 | Total1 | Total2 | Total3 | Total4 

我试图东西如下,

CREATE FUNCTION [dbo].[Dwg_logQuery_Test](@ProjectID int) 
RETURNS TABLE 
as 
return 
(
SELECT ID,Number, 
     Issue1, 
     Issue2, 
     Issue3, 
     Issue4,  
     Tonnage1, 
     Tonnage2, 
     Tonnage3, 
     Tonnage4, 
     SubmittedDate1, 
     SubmittedDate2, 
     SubmittedDate3, 
     SubmittedDate4, 
     EORReturnDate1, 
     EORReturnDate2, 
     EORReturnDate3, 
     EORReturnDate4, 
     Revision1, 
     Revision2, 
     Revision3, 
     Revision4 
FROM (SELECT ID, 
       [Issue Number], 
       [Number],    
       [SubmittedDate], 
       [EORReturnDate],    
       Revision, 
       [Tonnage], 
       'Issue' + Cast(rn AS CHAR(10)) AS Issue, 
       'Tonnage' + Cast (rn AS CHAR(10)) AS TonnageHeader, 
       'SubmittedDate'+Cast (rn AS CHAR(10)) AS SubmittedDateHeader, 
       'EORReturnDate'+Cast (rn AS CHAR(10)) AS EORReturnDateHeader, 
       'Revision'+Cast (rn AS CHAR(10)) AS RevisionHeader 
     FROM (SELECT dwgReg.ID, 
         dwgIssue.[Issue Number],       
         Row_number() 
         OVER ( 
          partition BY dwgIssue.[Drawing ID] 
          ORDER BY dwgReg.[ID], dwgRev.[Revision] 
         DESC, dwgIssue.[Issue Number] DESC) 
           AS rn,        
           dwgRev.Revision,        
           isnull(dwgIssue.weight1,0)+isnull(dwgIssue.weight2,0)+isnull(dwgIssue.weight3,0) as Tonnage, 
           dwgRev.[SDate] AS 'SubmittedDate', 
           dwgRev.[EDate] AS 'EORReturnDate' 
           ,dwgReg.Number 

       FROM Issue dwgIssue 
         INNER JOIN Register dwgReg 
           ON dwgIssue.[Drawing ID] = dwgReg.ID 
         INNER JOIN Revision dwgRev 
           ON dwgRev.ID=dwgIssue.[Revision ID] 
            AND dwgIssue.[Drawing ID]=dwgReg.ID                 
            where [email protected])dwgIssue 
     WHERE rn <= 4)dwgReg 
     PIVOT (Max([Issue Number]) 
      FOR Issue IN (Issue1, 
          Issue2, 
          Issue3, 
          Issue4)) pv 

          PIVOT (
          MAX([Tonnage]) 
          FOR TonnageHeader IN (Tonnage1, Tonnage2, Tonnage3, Tonnage4) 
          ) pv1 

          PIVOT (Max([SubmittedDate]) 
          FOR SubmittedDateHeader IN (SubmittedDate1,SubmittedDate2,SubmittedDate3,SubmittedDate4) 
          ) pv2 

          PIVOT (Max([EORReturnDate]) 
          FOR EORReturnDateHeader IN (EORReturnDate1,EORReturnDate2,EORReturnDate3,EORReturnDate4) 
          ) pv3 

          PIVOT (Max([Revision]) 
          FOR RevisionHeader IN (Revision1,Revision2,Revision3,Revision4) 
          ) pv4  

          ) 


GO 

但我失败了多个枢轴 所以请一些人帮我解决这个问题。

在此先感谢。

回答

2

以下查询您的查询使用dwgIssue派生表,结果直接从它使用条件聚集枢轴:

SELECT 
    ID, 
    Number, 
    Issue1 = MAX(CASE rn WHEN 1 THEN [Issue Number] END), 
    Issue2 = MAX(CASE rn WHEN 2 THEN [Issue Number] END), 
    Issue3 = MAX(CASE rn WHEN 3 THEN [Issue Number] END), 
    Issue4 = MAX(CASE rn WHEN 4 THEN [Issue Number] END), 
    Tonnage1 = MAX(CASE rn WHEN 1 THEN Tonnage END), 
    Tonnage2 = MAX(CASE rn WHEN 2 THEN Tonnage END), 
    Tonnage3 = MAX(CASE rn WHEN 3 THEN Tonnage END), 
    Tonnage4 = MAX(CASE rn WHEN 4 THEN Tonnage END), 
    SubmittedDate1 = MAX(CASE rn WHEN 1 THEN SubmittedDate END), 
    SubmittedDate2 = MAX(CASE rn WHEN 2 THEN SubmittedDate END), 
    SubmittedDate3 = MAX(CASE rn WHEN 3 THEN SubmittedDate END), 
    SubmittedDate4 = MAX(CASE rn WHEN 4 THEN SubmittedDate END), 
    EORReturnDate1 = MAX(CASE rn WHEN 1 THEN EORReturnDate END), 
    EORReturnDate2 = MAX(CASE rn WHEN 2 THEN EORReturnDate END), 
    EORReturnDate3 = MAX(CASE rn WHEN 3 THEN EORReturnDate END), 
    EORReturnDate4 = MAX(CASE rn WHEN 4 THEN EORReturnDate END), 
    Revision1 = MAX(CASE rn WHEN 1 THEN Revision END), 
    Revision2 = MAX(CASE rn WHEN 2 THEN Revision END), 
    Revision3 = MAX(CASE rn WHEN 3 THEN Revision END), 
    Revision4 = MAX(CASE rn WHEN 4 THEN Revision END) 
FROM 
    (
    SELECT 
     dwgReg.ID, 
     dwgIssue.[Issue Number], 
     rn = ROW_NUMBER() OVER (PARTITION BY dwgIssue.[Drawing ID] 
           ORDER BY dwgReg.[ID], dwgRev.[Revision] DESC, dwgIssue.[Issue Number] DESC), 
     dwgRev.Revision, 
     Tonnage = isnull(dwgIssue.weight1,0)+isnull(dwgIssue.weight2,0)+isnull(dwgIssue.weight3,0), 
     SubmittedDate = dwgRev.[SDate], 
     EORReturnDate = dwgRev.[EDate], 
     dwgReg.Number 
    FROM 
     dbo.Issue AS dwgIssue 
     INNER JOIN Register AS dwgReg 
       ON dwgIssue.[Drawing ID] = dwgReg.ID 
     INNER JOIN Revision dwgRev 
       ON dwgRev.ID=dwgIssue.[Revision ID] 
       AND dwgIssue.[Drawing ID]=dwgReg.ID                 
    WHERE [email protected] 
) AS dwgIssue 
WHERE 
    rn <= 4 
; 

条件聚集可能已经变得不太常见,作为枢纽方法a介绍了PIVOT操作员。但是,我仍然觉得,当我需要一次转换多个数据列时,最好是这样,就像你的情况一样。

4

这是否涵盖了您期望的结果?

DECLARE @ProjectID int = 23; 

WITH DataSrc as 
(
SELECT ID, [Issue Number] INumber, 
       [Number] NNumber,    
       [SubmittedDate], 
       [EORReturnDate],    
       Revision, 
       [Tonnage], 
       'Issue' + Cast(rn AS CHAR(10)) AS Issue, 
       'Tonnage' + Cast (rn AS CHAR(10)) AS TonnageHeader, 
       'SubmittedDate'+Cast (rn AS CHAR(10)) AS SubmittedDateHeader, 
       'EORReturnDate'+Cast (rn AS CHAR(10)) AS EORReturnDateHeader, 
       'Revision'+Cast (rn AS CHAR(10)) AS RevisionHeader 
     FROM (SELECT dwgReg.ID, 
         dwgIssue.[Issue Number],       
         Row_number() 
         OVER ( 
          partition BY dwgIssue.[Drawing ID] 
          ORDER BY dwgReg.[ID], dwgRev.[Revision] 
         DESC, dwgIssue.[Issue Number] DESC) 
           AS rn,        
           dwgRev.Revision,        
           isnull(dwgIssue.weight1,0)+isnull(dwgIssue.weight2,0)+isnull(dwgIssue.weight3,0) as Tonnage, 
           dwgRev.[SDate] AS 'SubmittedDate', 
           dwgRev.[EDate] AS 'EORReturnDate' 
           ,dwgReg.Number 

       FROM Issue dwgIssue 
         INNER JOIN Register dwgReg 
           ON dwgIssue.[Drawing ID] = dwgReg.ID 
         INNER JOIN Revision dwgRev 
           ON dwgRev.ID=dwgIssue.[Revision ID] 
            AND dwgIssue.[Drawing ID]=dwgReg.ID                 
            where [email protected])dwgIssue 
     WHERE rn <= 4 
) 
, DataSrc2 as 
(
    SELECT NNumber, INumber, Issue, Tonnage, TonnageHeader, SubmittedDate, SubmittedDateHeader,Revision, RevisionHeader 
    FROM DataSrc 
) 
SELECT * from DataSrc2 
PIVOT (MAX(INumber) FOR Issue in ([Issue1], [Issue2], [Issue3], [Issue4])) pv1 
PIVOT (MAX([Tonnage]) FOR TonnageHeader IN ([Tonnage1], [Tonnage2], [Tonnage3], [Tonnage4])) pv2 
PIVOT (Max([SubmittedDate]) FOR SubmittedDateHeader IN ([SubmittedDate1],[SubmittedDate2],[SubmittedDate3],[SubmittedDate4])) pv3 
PIVOT (Max([Revision]) FOR RevisionHeader IN ([Revision1], [Revision2], [Revision3], [Revision4])) pv4 
GO 
 
NNumber | Issue1 | Issue2 | Issue3 | Issue4 | Tonnage1 | Tonnage2 | Tonnage3 | Tonnage4 | SubmittedDate1  | SubmittedDate2  | SubmittedDate3  | SubmittedDate4  | Revision1 | Revision2 | Revision3 | Revision4 
:------- | -----: | -----: | -----: | -----: | -------: | -------: | -------: | -------: | :------------------ | :------------------ | :------------------ | :------------------ | :-------- | :-------- | :-------- | :-------- 
1  |  2 | null | null | null |  12 |  null |  null |  null | 21/04/2017 00:00:00 | null    | null    | null    | 0   | null  | null  | null  
100  |  1 | null | null | null |  6 |  null |  null |  null | 18/04/2017 00:00:00 | null    | null    | null    | 0   | null  | null  | null  
11112 |  1 | null | null | null |  71 |  null |  null |  null | null    | null    | null    | null    | 0   | null  | null  | null  
2  |  1 | null | null | null |  6 |  null |  null |  null | 18/04/2017 00:00:00 | null    | null    | null    | 0   | null  | null  | null  
23  |  1 | null | null | null |  68 |  null |  null |  null | 18/04/2017 00:00:00 | null    | null    | null    | 0   | null  | null  | null  
3  |  1 | null | null | null |  4 |  null |  null |  null | null    | null    | null    | null    | 0   | null  | null  | null  
3333  |  2 | null | null | null |  48 |  null |  null |  null | 18/04/2017 00:00:00 | null    | null    | null    | 3   | null  | null  | null  
4  |  1 | null | null | null |  45 |  null |  null |  null | 18/04/2017 00:00:00 | null    | null    | null    | 0   | null  | null  | null  
555  |  1 | null | null | null |  5 |  null |  null |  null | 18/04/2017 00:00:00 | null    | null    | null    | 0   | null  | null  | null  
666666 |  1 | null | null | null |  38 |  null |  null |  null | 18/04/2017 00:00:00 | null    | null    | null    | 0   | null  | null  | null  
7  |  9 | null | null | null |  32 |  null |  null |  null | null    | null    | null    | null    | 0   | null  | null  | null  
77  |  1 | null | null | null |  487 |  null |  null |  null | 18/04/2017 00:00:00 | null    | null    | null    | 0   | null  | null  | null  
88  |  1 | null | null | null |  6 |  null |  null |  null | 18/04/2017 00:00:00 | null    | null    | null    | 0   | null  | null  | null  
983  |  1 | null | null | null |  76 |  null |  null |  null | null    | null    | null    | null    | 0   | null  | null  | null  
99  |  1 | null | null | null |  91 |  null |  null |  null | 18/04/2017 00:00:00 | null    | null    | null    | 0   | null  | null  | null  
D1  |  2 | null | null | null |  42 |  null |  null |  null | null    | null    | null    | null    | 0   | null  | null  | null  
DT1  | null | null | null |  2 |  null |  null |  null |  21 | null    | null    | null    | 18/04/2017 00:00:00 | null  | null  | null  | 1   
DT1  | null | null |  2 | null |  null |  null |  24 |  null | null    | null    | 18/04/2017 00:00:00 | null    | null  | null  | 1   | null  
DT1  | null |  3 | null | null |  null |  24 |  null |  null | null    | 18/04/2017 00:00:00 | null    | null    | null  | 1   | null  | null  
DT1  |  1 | null | null | null |  24 |  null |  null |  null | null    | null    | null    | null    | 2   | null  | null  | null  
DTA05 |  1 | null | null | null |  56 |  null |  null |  null | 18/04/2017 00:00:00 | null    | null    | null    | 0   | null  | null  | null  
Dwg1  | null |  1 | null | null |  null |  10 |  null |  null | null    | 18/04/2017 00:00:00 | null    | null    | null  | 0   | null  | null  
Dwg1  |  2 | null | null | null |  4 |  null |  null |  null | 18/04/2017 00:00:00 | null    | null    | null    | 0   | null  | null  | null  
Dwg12345 |  1 | null | null | null |  36 |  null |  null |  null | null    | null    | null    | null    | 0   | null  | null  | null  

dbfiddle here

更新

好吧,如果你想UNION和GROUP所有支点结果,你可以做到这一点在这条路上:

注意:我已经将它与两个第一个PIVOT结果一起工作,因为您必须手动将所有带有空值的返回列添加到所有PIVOT查询中。

, DataSrc2 as 
(
    SELECT NNumber, INumber, Issue, Tonnage, TonnageHeader, SubmittedDate, SubmittedDateHeader,Revision, RevisionHeader 
    FROM DataSrc where NNumber = 'DT1' 
) 
    , Pvt as 
    (
     SELECT NNumber,SubmittedDate1,SubmittedDate2,SubmittedDate3,SubmittedDate4, null as Issue1, null as Issue2, null as Issue3, null Issue4 
     from (select NNumber, SubmittedDateHeader, SubmittedDate from DataSrc2) src 
     PIVOT (Max([SubmittedDate]) FOR SubmittedDateHeader IN ([SubmittedDate1],[SubmittedDate2],[SubmittedDate3],[SubmittedDate4])) pv3 
     UNION ALL 
     SELECT NNumber, null as SubmittedDate1, null as SubmittedDate2, null as SubmittedDate3, null as SubmittedDate4, Issue1, Issue2, Issue3, Issue4 
     from (select NNumber, Issue, INumber from DataSrc2) src 
     PIVOT (MAX(INumber) FOR Issue in ([Issue1], [Issue2], [Issue3], [Issue4])) pv1 
) 
    select NNumber, MAX(SubmittedDate1) SD1, MAX(SubmittedDate2) SD2, MAX(SubmittedDate3) SD3, MAX(SubmittedDate4) SD4, 
        MAX(Issue1) Iss1, MAX(Issue2) Iss2, MAX(Issue3) Iss3, MAX(Issue4) Iss4 
    from Pvt 
    group by Nnumber; 

这是结果,但我建议你建立一个临时表,这个工作。

 
NNumber | SD1 | SD2     | SD3     | SD4     | Iss1 | Iss2 | Iss3 | Iss4 
:------ | :--- | :------------------ | :------------------ | :------------------ | ---: | ---: | ---: | ---: 
DT1  | null | 18/04/2017 00:00:00 | 18/04/2017 00:00:00 | 18/04/2017 00:00:00 | 1 | 3 | 2 | 2 

Warning: Null value is eliminated by an aggregate or other SET operation. 

dbfiddle here

+0

感谢您的查询,但它再次给了我相同的结果, 我需要一个记录每个数字,如果你看到数字D1有4条记录我需要他们所有人在一个单一行作为 D1 | 1 | 3 | 2 | 2 |等等................... –

+0

@VickySelvam请看看更新 –

+0

谢谢@Andy我想我不是以清晰的方式向你解释我的要求,如果一个数字包含多于一行,那么我需要每个数字一条记录,然后将这些行与删除空值 –