在我的程序中将两个不同的选择组合成相同的结果 table?
Combine two different Selects into same result table in my procedure?
我正在尝试编写一个包含两个选择的过程。有什么方法可以将两个选择组合成相同的结果 table?
现在我在两个不同的 table 中得到结果。
这是我的程序
ALTER PROCEDURE [dbo].[GetMachineStatus] (@MachineID int) as
begin
set nocount on
declare @Availabilitytime datetime, @TimeNow datetime, @queryMachineStatus nvarchar(250)
select
@Availabilitytime =
(select AvailabilityTime from machines where MachineID = @MachineID)
, @TimeNow = getDate()
, @queryMachineStatus = N'select avg(effectively) As Availability, (MAX(Counter)-MIN(counter)) As Counter from '
+ quoteName(convert(nvarchar, @MachineID))
+ N' where [time] between '
+ quoteName(convert(nvarchar, @Availabilitytime, 120), nchar(39))
+ N' and '
+ quoteName(convert(nvarchar, @TimeNow, 120), nchar(39))
+ N'select top (1) effectively as effectively from'
+ quoteName(convert(nvarchar, @MachineID))
+ N' Order by time DESC'
execute sp_executesql @queryMachineStatus
End
假设您想添加一个额外的列,并且假设您的第一个结果只有一行,那么一个简单的 sub-query 就可以完成这项工作,例如
set @queryMachineStatus = N'select avg(effectively) as Availability, (MAX(Counter)-MIN(counter)) as Counter'
+ N', (select top (1) effectively as effectively from'
+ quotename(convert(nvarchar(30), @MachineID))
+ N' Order by time DESC) as Effectively'
+ ' from '
+ quotename(convert(nvarchar(30), @MachineID))
+ N' where [time] between '
+ quotename(convert(nvarchar(30), @Availabilitytime, 120), nchar(39))
+ N' and '
+ quotename(convert(nvarchar(30), @TimeNow, 120), nchar(39));
我正在尝试编写一个包含两个选择的过程。有什么方法可以将两个选择组合成相同的结果 table?
现在我在两个不同的 table 中得到结果。
这是我的程序
ALTER PROCEDURE [dbo].[GetMachineStatus] (@MachineID int) as
begin
set nocount on
declare @Availabilitytime datetime, @TimeNow datetime, @queryMachineStatus nvarchar(250)
select
@Availabilitytime =
(select AvailabilityTime from machines where MachineID = @MachineID)
, @TimeNow = getDate()
, @queryMachineStatus = N'select avg(effectively) As Availability, (MAX(Counter)-MIN(counter)) As Counter from '
+ quoteName(convert(nvarchar, @MachineID))
+ N' where [time] between '
+ quoteName(convert(nvarchar, @Availabilitytime, 120), nchar(39))
+ N' and '
+ quoteName(convert(nvarchar, @TimeNow, 120), nchar(39))
+ N'select top (1) effectively as effectively from'
+ quoteName(convert(nvarchar, @MachineID))
+ N' Order by time DESC'
execute sp_executesql @queryMachineStatus
End
假设您想添加一个额外的列,并且假设您的第一个结果只有一行,那么一个简单的 sub-query 就可以完成这项工作,例如
set @queryMachineStatus = N'select avg(effectively) as Availability, (MAX(Counter)-MIN(counter)) as Counter'
+ N', (select top (1) effectively as effectively from'
+ quotename(convert(nvarchar(30), @MachineID))
+ N' Order by time DESC) as Effectively'
+ ' from '
+ quotename(convert(nvarchar(30), @MachineID))
+ N' where [time] between '
+ quotename(convert(nvarchar(30), @Availabilitytime, 120), nchar(39))
+ N' and '
+ quotename(convert(nvarchar(30), @TimeNow, 120), nchar(39));