Как я беру результаты нескольких выборов и объединения в одну строку

Вы используете параметр f в лямбде внутри asort(), но не фиксируете его. Попробуйте добавить f в список захвата (замените [] на [&f]).

6
задан Cade Roux 8 June 2009 в 15:56
поделиться

3 ответа

SELECT  (
        SELECT  avg(KW)
        FROM    genset
        WHERE   (GenSetName   like 'GEA3519')
                and GenDate >= '1 jan   2003    00:00:00'
                and GenDate < '1 feb 2003 00:00:00'
        ) AS avg_GEA3519,
        (
        SELECT  avg(KW)
        FROM    genset
        WHERE   (GenSetName   like 'GEA3520')
                and GenDate >= '1 jan   2003    00:00:00'
                and GenDate < '1 feb 2003 00:00:00'
        ) AS avg_GEA3520,
        (
        SELECT  avg(KW)
        FROM    genset
        WHERE   (GenSetName   like 'GEA3521')
                and GenDate >= '1 jan   2003    00:00:00'
                and GenDate < '1 feb 2003 00:00:00'
        ) AS avg_GEA3521,
        (
        SELECT  avg(KW)
        FROM    genset
        WHERE   (GenSetName   like 'GEA3522')
                and GenDate >= '1 jan   2003    00:00:00'
                and GenDate < '1 feb 2003 00:00:00'
        ) AS avg_GEA3522

, или в SQL Server 2005+ , это:

SELECT  [GEA3519], [GEA3520], [GEA3521], [GEA3522]
FROM    (
        SELECT  GenSetName, KW
        FROM    genset
        WHERE   GenDate >= '1 Jan 2003  00:00:00'
                AND GenDate < '1 Feb 2003 00:00:00'
        ) AS q
PIVOT
(
        AVG(KW)
        FOR  GenSetName IN (['GEA3519'], ['GEA3520'], ['GEA3521'], ['GEA3522']
)
22
ответ дан 8 December 2019 в 04:31
поделиться

Другой вариант :

SELECT
     AVG(GEN_101.kw) AS GEN_101_AVG,
     AVG(GEN_201.kw) AS GEN_201_AVG,
     AVG(GEN_301.kw) AS GEN_301_AVG,
     AVG(GEN_401.kw) AS GEN_401_AVG
FROM
     Genset GEN_101
INNER JOIN Genset GEN_201 ON
     GEN_201.GenSetName = 'GEA3520' AND
     GEN_201.GenDate >= '1 jan 2003 00:00:00' AND
     GEN_201.GenDate < '1 feb 2003 00:00:00'
INNER JOIN Genset GEN_101 ON
     GEN_301.GenSetName = 'GEA3521' AND
     GEN_301.GenDate >= '1 jan 2003 00:00:00' AND
     GEN_301.GenDate < '1 feb 2003 00:00:00'
INNER JOIN Genset GEN_101 ON
     GEN_401.GenSetName = 'GEA3522' AND
     GEN_401.GenDate >= '1 jan 2003 00:00:00' AND
     GEN_401.GenDate < '1 feb 2003 00:00:00'
WHERE
     GEN_101.GenSetName = 'GEA3519' AND
     GEN_101.GenDate >= '1 jan 2003 00:00:00' AND
     GEN_101.GenDate < '1 feb 2003 00:00:00'
2
ответ дан 8 December 2019 в 04:31
поделиться

Поскольку количество выборок ограничено четырьмя, одним из решений может быть выбор в переменных, а затем окончательный выбор. Примерно так:

declare @var1 <TYPE>
declare @var2 <TYPE>
declare @var3 <TYPE>
declare @var4 <TYPE>

select @var1 = SELECT avg(...) ...
select @var2 = ...
select @var3 = ...
select @var4 = ...

select @var1 as ..., @var2 as ..., @var3 as ..., @var4 as ...
1
ответ дан 8 December 2019 в 04:31
поделиться