2016-04-11 1 views
0

Good Morning.Bir sonraki ilişkili kayıt sonucu, Sql Set'te önceki sonuca göre

Araçlardaki lastik değişimlerine ve denetimlere dayalı bir rapor yapmam istendi.

Yazının altındaki farklı parçaları iliştiriyorum.

Ama temelde konulmuştur ve başka lastik yerini vb

çekerken bir lastik varlık arasındaki fark esas belirli bir konumda ne kadar uzun öğrenmek yapmanız gereken ne hayır var Genel olarak sql sunucusuna yeni olduğum için bu sorgu ile başlayacağım fikri. sql

benim tablolar

CREATE TABLE assets_tyre_change_header 
(id INT NOT NULL IDENTITY(1,1), 
    change_date date not null, 
    asset_id varchar(50) not null, 
    odometer_hour varchar(50), 
    completed tinyint, 
    comment text, 
    CONSTRAINT assets_tyre_change_pk PRIMARY KEY (id) 
); 

CREATE TABLE assets_tyre_change_details 
(id INT NOT NULL IDENTITY(1,1), 
    tyre_change_id INT, 
    tyre_id varchar(50) not null, 
    wheel_position varchar(50) not null, 
    tread_depth int not null, 
    minimum_depth int not null 
    CONSTRAINT assets_tyre_change_detail_pk PRIMARY KEY (id) 
); 

create table assets_tyre_inspection_header 
(id INT NOT NULL IDENTITY(1,1), 
    inspection_date date not null, 
    asset_id varchar(50) not null, 
    odometer_hour varchar(50), 
    completed tinyint, 
    comment text, 
    CONSTRAINT assets_tyre_inspection_pk PRIMARY KEY (id) 
); 

CREATE TABLE assets_tyre_inspection_details 
(id INT NOT NULL IDENTITY(1,1), 
    tyre_inspection_id INT, 
    tyre_id varchar(50) not null, 
    wheel_position varchar(50) not null, 
    tread_depth int not null 
    CONSTRAINT assets_tyre_inspection_detail_pk PRIMARY KEY (id) 
); 

Ben sonraki adım sql

select * from (
(select 'change' as type, 
    tyre_id, 
    asset_id, 
    wheel_position, 
    min(convert(int,odometer_hour))as min_oh, 
    max(convert(int,odometer_hour))as max_oh, 
    min(tread_depth)as min_depth, 
    min(change_date) as transdate 
    from assetsandfuel.dbo.assets_tyre_change_details as c_details 
    join assetsandfuel.dbo.assets_tyre_change_header as c_header on c_header.id = c_details.tyre_change_id 
    group by asset_id,tyre_id,wheel_position 
) 
union 
(select 'inspect' as type, 
tyre_id, 
asset_id, 
wheel_position, 
min(convert(int,odometer_hour))as min_oh, 
max(convert(int,odometer_hour))as max_oh, 
min(tread_depth)as min_depth, 
min(inspection_date) as transdate 
from assetsandfuel.dbo.assets_tyre_inspection_details as i_details 
join assetsandfuel.dbo.assets_tyre_inspection_header as i_header on i_header.id = i_details.tyre_inspection_id 
group by asset_id,tyre_id,wheel_position 
) 
)as report_table 
order by transdate; 

Bu sonuç ekli

sonucu tablo olarak bu tablolardan baz ayrıntıları çekin etmektir vardır ile ilişkili kayıt formları bir masale olarak teslim edilir tablo

type tyre asset   position min max depth transdate 
change T001 TestV   4   1489 1489 15  2016-04-01 
change T002 TestV   6   1489 1489 15  2016-04-01 
change F146 Forklift001  3   6900 6900 30  2016-04-02 
change F147 Forklift001  2   6900 6900 30  2016-04-02 
change T001 TestV   6   2800 2800 12  2016-04-08 
change T002 TestV   4   2800 2800 10  2016-04-08 
change T003 TestV   12  2800 2800 15  2016-04-08 
inspect F146 Forklift001  3   6920 6920 27  2016-04-09 
inspect F147 Forklift001  2   6920 6920 15  2016-04-09 
inspect T001 TestV   6   3400 3400 9  2016-04-10 
inspect T003 TestV   12  3400 3400 12  2016-04-10 
change F148 Forklift001  1   6950 6950 30  2016-04-11 
change F149 Forklift001  4   6950 6950 30  2016-04-11 

cevap

0
/* Using set up below 
    Generate a row number to sequence tyre changes and then join each row to the next row*/ 
SELECT TC1.Type, tc1.tyre_id as Tyre, tc1.asset_id as Asset, tc1.wheel_position as Position, 
     tc1.MINOH as 'Min', tc2.oh as 'Max', cast(tc2.oh as int) - cast(tc1.minoh as int) as 'Time in Wheel Position', 
     tc1.tread_depth, tc1.trandate 
FROM 
(
SELECT 'Change' as Type,TH.id AS THID, TH.change_date TRANDATE,TH.asset_id,TH.odometer_hour MINOH,TH.completed,TH.comment, 
     TD.id AS TDID, TD.tyre_change_id,TD.tyre_id,TD.wheel_position,TD.tread_depth,TD.minimum_depth 
     ,ROW_NUMBER() OVER(PARTITION BY TH.ASSET_ID ORDER BY TD.TYRE_ID ,TH.ID) AS ROWNUMBER 
FROM [dbo].[assets_tyre_change_header] TH 
JOIN  [dbo].[assets_tyre_change_details] TD ON TD.TYRE_CHANGE_ID = TH.ID 
) TC1 
LEFT JOIN 
(
SELECT 'Change' as Type , TH.id AS THID, TH.change_date TRANDATE,TH.asset_id,TH.odometer_hour OH,TH.completed,TH.comment, 
     TD.id AS TDID, TD.tyre_change_id,TD.tyre_id,TD.wheel_position,TD.tread_depth,TD.minimum_depth 
     ,ROW_NUMBER() OVER(PARTITION BY TH.ASSET_ID ORDER BY TD.TYRE_ID ,TH.ID) AS ROWNUMBER 
FROM [dbo].[assets_tyre_change_header] TH 
JOIN  [dbo].[assets_tyre_change_details] TD ON TD.TYRE_CHANGE_ID = TH.ID 
) TC2 
ON TC2.ASSET_ID = TC1.ASSET_ID AND TC2.tyre_id = TC1.TYRE_ID AND TC2.ROWNUMBER = TC1.ROWNUMBER + 1 



/* 
Create Tables 

DROP TABLE [dbo].[assets_tyre_change_header] 
GO 


SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[assets_tyre_change_header](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [change_date] [date] NOT NULL, 
    [asset_id] [varchar](50) NOT NULL, 
    [odometer_hour] [varchar](50) NULL, 
    [completed] [tinyint] NULL, 
    [comment] [text] NULL, 
CONSTRAINT [assets_tyre_change_pk] 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] TEXTIMAGE_ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 

USE [Sandbox] 
GO 

DROP TABLE [dbo].[assets_tyre_change_details] 
GO 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[assets_tyre_change_details](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [tyre_change_id] [int] NULL, 
    [tyre_id] [varchar](50) NOT NULL, 
    [wheel_position] [varchar](50) NOT NULL, 
    [tread_depth] [int] NOT NULL, 
    [minimum_depth] [int] NOT NULL, 
CONSTRAINT [assets_tyre_change_detail_pk] 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 ANSI_PADDING OFF 
GO 

USE [Sandbox] 
GO 

DROP TABLE [dbo].[assets_tyre_inspection_header] 
GO 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[assets_tyre_inspection_header](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [inspection_date] [date] NOT NULL, 
    [asset_id] [varchar](50) NOT NULL, 
    [odometer_hour] [varchar](50) NULL, 
    [completed] [tinyint] NULL, 
    [comment] [text] NULL, 
CONSTRAINT [assets_tyre_inspection_pk] 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] TEXTIMAGE_ON [PRIMARY] 

GO 

SET ANSI_PADDING OFF 
GO 


USE [Sandbox] 
GO 

DROP TABLE [dbo].[assets_tyre_inspection_details] 
GO 

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

SET ANSI_PADDING ON 
GO 

CREATE TABLE [dbo].[assets_tyre_inspection_details](
    [id] [int] IDENTITY(1,1) NOT NULL, 
    [tyre_inspection_id] [int] NULL, 
    [tyre_id] [varchar](50) NOT NULL, 
    [wheel_position] [varchar](50) NOT NULL, 
    [tread_depth] [int] NOT NULL, 
CONSTRAINT [assets_tyre_inspection_detail_pk] 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 ANSI_PADDING OFF 
GO 

--------------- 
Populate Tables 
--------------- 

insert into assets_tyre_change_header 
(--id , 
    change_date , 
    asset_id , 
    odometer_hour 
    --completed , 
    --comment 
) 
values 
(cast('2016/04/01' as smalldatetime),'TestV',1489), 
(cast('2016/04/01' as smalldatetime),'TestV',1489), 
(cast('2016/04/02' as smalldatetime),'Forklift001',6900), 
(cast('2016/04/02' as smalldatetime),'Forklift001',6900), 
(cast('2016/04/08' as smalldatetime),'TestV',2800), 
(cast('2016/04/08' as smalldatetime),'TestV',2800), 
(cast('2016/04/08' as smalldatetime),'TestV',2800), 
(cast('2016/04/11' as smalldatetime),'Forklift001',6950), 
(cast('2016/04/11' as smalldatetime),'Forklift001',6950) 

insert into assets_tyre_change_details 
(--id , 
    tyre_change_id , 
    tyre_id , 
    wheel_position , 
    tread_depth , 
    minimum_depth 
) 
values 
(1,'T001',4,15,5), 
(2,'T002',6,15,5), 
(3,'F146',3,30,5), 
(4,'F147',2,30,5), 
(5,'T001',6,12,5), 
(6,'T002',4,10,5), 
(7,'T003',12,15,5), 
(8,'F148',1,1,5), 
(9,'F149',4,4,5) 

insert into assets_tyre_inspection_header 
(--id , 
    inspection_date , 
    asset_id , 
    odometer_hour 
    --completed , 
    --comment 
) 
values 
(cast('2016/04/09' as smalldatetime),'Forklift001',6920), 
(cast('2016/04/09' as smalldatetime),'Forklift001',6920), 
(cast('2016/04/10' as smalldatetime),'TestV',3400), 
(cast('2016/04/10' as smalldatetime),'TestV',3400) 

insert into assets_tyre_inspection_details 
(--id , 
    tyre_inspection_id , 
    tyre_id , 
    wheel_position , 
    tread_depth --, 
    --tread_depth 
) 
values 
(1,'F146',3,27), 
(2,'F147',2,15), 
(3,'T001',6,9), 
(4,'T002',12,12) 


*/ 
+0

Teşekkürler. Denetim masamı da eklemek için onu düzenlemeye çalışıyorum. Ama şimdiye kadar umut verici görünüyor. Sonuçları bilmene izin verecek –