Sql 在一个返回行中合并多个查询

Sql 在一个返回行中合并多个查询,sql,sql-server-2014,Sql,Sql Server 2014,我有一个查询,每个DetectorID应该返回一行。我们目前的情况如下: DECLARE @StartDate datetime SET @StartDate = '2017-12-01 00:00' DECLARE @EndDate datetime select @EndDate ='2018-01-01 00:00' DECLARE @Limit1 real SET @Limit1 = 200; DECLARE @AssenLimit1 real SET @AssenLimit1 =

我有一个查询,每个DetectorID应该返回一行。我们目前的情况如下:

DECLARE @StartDate datetime SET @StartDate  = '2017-12-01 00:00'
DECLARE @EndDate datetime select @EndDate ='2018-01-01 00:00'

DECLARE @Limit1 real SET @Limit1 = 200; DECLARE @AssenLimit1 real SET @AssenLimit1 = 0;
DECLARE @Limit2 real SET @Limit2 = 300; DECLARE @AssenLimit2 real SET @AssenLimit2 = 0;
DECLARE @Limit3 real SET @Limit3 = 350; DECLARE @AssenLimit3 real SET @AssenLimit3 = 0;
DECLARE @Limit4 real SET @Limit4 = 400; DECLARE @AssenLimit4 real SET @AssenLimit4 = 0;
DECLARE @Limit5 real set @Limit5 = 500; DECLARE @AssenLimit5 real SET @AssenLimit5 = 0; 

SELECT DetectorID,  AVG(ValidWIM) AS 'PI_mean_WIM',
COUNT(ValidWIM) AS 'PI_mean_WIM2',
COUNT(CASE
        WHEN ValidWIM > 0.5 THEN ValidWIM ELSE NULL END)
        AS 'PI_mean_WIM3'

,AVG((ValidWDD_Left+ValidWDD_Right)/2) AS 'PI_mean_WDD' 
,COUNT(ValidWDD_Left) AS 'PI_mean_WDD2'
,COUNT (CASE
        WHEN (ValidWDD_Left>0.5 AND ValidWDD_Right>0.5) THEN ValidWDD_Left ELSE NULL END)
        AS PI_mean_WDD3
,COUNT(CASE 
        WHEN AxleLoad IS NOT NULL Then TrainPassageInformationID ELSE NULL END)
         AS 'nWheels' 
, COUNT(CASE
        WHEN (PeakForceLeft > @Limit1 OR PeakForceRight>@Limit1) THEN TrainPassageInformationID ELSE NULL END)
        AS 'n>200'
, COUNT(CASE
        WHEN (PeakForceLeft > @Limit2 OR PeakForceRight>@Limit2) THEN TrainPassageInformationID ELSE NULL END)
        AS 'n>300'
, COUNT(CASE
        WHEN (PeakForceLeft > @Limit3 OR PeakForceRight>@Limit3) THEN TrainPassageInformationID ELSE NULL END)
        AS 'n>350'
, COUNT(CASE
        WHEN (PeakForceLeft > @Limit4 OR PeakForceRight>@Limit4) THEN TrainPassageInformationID ELSE NULL END)
        AS 'n>400'
, COUNT(CASE
        WHEN (PeakForceLeft > @Limit5 OR PeakForceRight>@Limit5) THEN TrainPassageInformationID ELSE NULL END)
        AS 'n>500'
From WheelDamage 
where (TimeOfAxle > @StartDate AND TimeOfAxle < @EndDate) and DetectorID in (11,12)
GROUP BY DetectorID 
order by DetectorID asc
SELECT DetectorID,
AVG(PeakForceLeft) AS 'NoiseLeft' FROM WheelDamage as t
where PeakForceLeft in (
    select top 10 percent PeakForceLeft 
    from wheeldamage as tt
    where tt.WheelDamageID = t.WheelDamageID AND tt.PeakForceLeft <> 0  AND tt.PeakForceLeft  IS NOT NULL AND (t.TimeOfAxle > @StartDate AND t.TimeOfAxle < @EndDate)
    order by tt.PeakForceLeft asc)
Group By DetectorID 
order by DetectorID asc


SELECT DetectorID,
AVG(PeakForceRight) AS 'NoiseRight' FROM WheelDamage as t
where PeakForceLeft in (
    select top 10 percent PeakForceRight
    from wheeldamage as tt
    where tt.WheelDamageID = t.WheelDamageID AND tt.PeakForceRight <> 0  AND tt.PeakForceLeft  IS NOT NULL AND (t.TimeOfAxle > @StartDate AND t.TimeOfAxle < @EndDate)
    order by tt.PeakForceLeft asc)
    Group By DetectorID 
order by DetectorID asc

SELECT DetectorId, COUNT (DateTime) AS 'Tags1' 
FROM [TagPassage] 
WHERE  Valid = 1 AND (DateTime > @StartDate AND DateTime < @EndDate)
GROUP by DetectorID 
Order by DetectorID asc

SELECT DetectorID, COUNT(CASE 
    WHEN (TotalWeight=0 OR TotalWeight IS NULL) AND (HasTrainStandStill<>1 OR HasTrainStandStill IS NULL) THEN  (TrainPassageInformationID) ELSE NULL END) AS 'notAnalyzed'
 , SUM (TotalWeight) AS 'TotalWeight'
FROM TrainPassageInformation 
WHERE   (Datetime > @StartDate AND Datetime < @EndDate) 
Group By DetectorID 
order by DetectorID asc
这是复述5个新的行,我理解。这是因为我有5条select语句。但是,我需要知道如何将底部的4个select语句放在顶部的语句中,以便它只返回1行

我试过选择X xxx。但这会导致返回的行数超过1行的错误


上图显示了当前结果。我希望底部的4个表成为第一个表中的列。

您可以将所有脚本作为table和linkbydetectorid连接在一起,然后您可以从底部到右侧的4个脚本中选择列