在我的程序中将两个不同的选择组合成相同的结果 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));