2017-02-08 12 views
1

9つの異なるサブクエリの結果から1つのテーブルを作成しようとしています。ここに私のコードは次のとおりです。複数のサブクエリから結果を選択

SELECT 

APR16 
FROM(
SELECT Sum(APR.[kwh]) AS APR16 
FROM Peak_Times, Meter_Buckets INNER JOIN APR ON Meter_Buckets.METER = APR.meter 
WHERE (((APR.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND APR.kwh IS NOT NULL) 
, 

MAY16 
FROM(
SELECT Sum(MAY.[kwh]) AS MAY16 
FROM Peak_Times, Meter_Buckets INNER JOIN MAY ON Meter_Buckets.METER = MAY.meter 
WHERE (((MAY.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND MAY.kwh IS NOT NULL) 
, 

JUN16 
FROM(
SELECT Sum(JUN.[kwh]) AS JUN16 
FROM Peak_Times, Meter_Buckets INNER JOIN JUN ON Meter_Buckets.METER = JUN.meter 
WHERE (((JUN.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND JUN.kwh IS NOT NULL) 
, 

JUL16 
FROM(
SELECT Sum(JUL.[kwh]) AS JUL16 
FROM Peak_Times, Meter_Buckets INNER JOIN JUL ON Meter_Buckets.METER = JUL.meter 
WHERE (((JUL.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND JUL.kwh IS NOT NULL) 
, 

AUG16 
FROM(
SELECT Sum(AUG.[kwh]) AS AUG16 
FROM Peak_Times, Meter_Buckets INNER JOIN AUG ON Meter_Buckets.METER = AUG.meter 
WHERE (((AUG.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND AUG.kwh IS NOT NULL) 
, 

SEP16 
FROM(
SELECT Sum(SEP.[kwh]) AS SEP16 
FROM Peak_Times, Meter_Buckets INNER JOIN SEP ON Meter_Buckets.METER = SEP.meter 
WHERE (((SEP.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND SEP.kwh IS NOT NULL) 
, 

OCT16 
FROM(
SELECT Sum(OCT.[kwh]) AS OCT16 
FROM Peak_Times, Meter_Buckets INNER JOIN OCT ON Meter_Buckets.METER = OCT.meter 
WHERE (((OCT.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND OCT.kwh IS NOT NULL) 
, 

NOV16 
FROM(
SELECT Sum(NOV.[kwh]) AS NOV16 
FROM Peak_Times, Meter_Buckets INNER JOIN NOV ON Meter_Buckets.METER = NOV.meter 
WHERE (((NOV.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND NOV.kwh IS NOT NULL) 
, 

DEC16 
FROM(
SELECT Sum(DEC.[kwh]) AS DEC16 
FROM Peak_Times, Meter_Buckets INNER JOIN DEC ON Meter_Buckets.METER = DEC.meter 
WHERE (((DEC.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND DEC.kwh IS NOT NULL) 

私は最初のサブクエリ、

SELECT 

APR16 
FROM(
SELECT Sum(APR.[kwh]) AS APR16 
FROM Peak_Times, Meter_Buckets INNER JOIN APR ON Meter_Buckets.METER = APR.meter 
WHERE (((APR.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND APR.kwh IS NOT NULL); 

をすれば、それはエラーなしで結果を返します。しかし、私が上記のようにすべて一緒にチェーンしようとすると、2番目のFROMに構文エラーが出ます。誰もがこれを行うために私に正しい構文を伝えることができ

APR16|MAY16|JUN16 
57212|45681|721 

:私はこれに似た結果をしたいですか?これは私が見落とした単純なものでも、私ができないものかもしれません。事前にお手伝いいただきありがとうございます。あなたはこのように探しているフォーマットで複数のサブクエリの結果を得ることができます

答えて

0

SELECT 
    (SELECT Sum(APR.[kwh]) 
    FROM Peak_Times, Meter_Buckets INNER JOIN APR ON Meter_Buckets.METER = APR.meter 
    WHERE (((APR.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND APR.kwh IS NOT NULL) 
    AS APR16 
    , 
    (SELECT Sum(MAY.[kwh]) 
    FROM Peak_Times, Meter_Buckets INNER JOIN MAY ON Meter_Buckets.METER = MAY.meter 
    WHERE (((MAY.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND MAY.kwh IS NOT NULL) 
    AS MAY16 
    , 
    (SELECT Sum(JUN.[kwh]) 
    FROM Peak_Times, Meter_Buckets INNER JOIN JUN ON Meter_Buckets.METER = JUN.meter 
    WHERE (((JUN.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND JUN.kwh IS NOT NULL) 
    AS JUN16 
    , 
    (SELECT Sum(JUL.[kwh]) 
    FROM Peak_Times, Meter_Buckets INNER JOIN JUL ON Meter_Buckets.METER = JUL.meter 
    WHERE (((JUL.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND JUL.kwh IS NOT NULL) 
    AS JUL16 
    , 
    (SELECT Sum(AUG.[kwh]) 
    FROM Peak_Times, Meter_Buckets INNER JOIN AUG ON Meter_Buckets.METER = AUG.meter 
    WHERE (((AUG.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND AUG.kwh IS NOT NULL) 
    AS AUG16 
    , 
    (SELECT Sum(SEP.[kwh]) 
    FROM Peak_Times, Meter_Buckets INNER JOIN SEP ON Meter_Buckets.METER = SEP.meter 
    WHERE (((SEP.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND SEP.kwh IS NOT NULL) 
    AS SEP16 
    , 
    (SELECT Sum(OCT.[kwh]) 
    FROM Peak_Times, Meter_Buckets INNER JOIN OCT ON Meter_Buckets.METER = OCT.meter 
    WHERE (((OCT.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND OCT.kwh IS NOT NULL) 
    AS OCT16 
    , 
    (SELECT Sum(NOV.[kwh]) 
    FROM Peak_Times, Meter_Buckets INNER JOIN NOV ON Meter_Buckets.METER = NOV.meter 
    WHERE (((NOV.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND NOV.kwh IS NOT NULL) 
    AS NOV16 
    , 
    (SELECT Sum(DEC.[kwh]) 
    FROM Peak_Times, Meter_Buckets INNER JOIN DEC ON Meter_Buckets.METER = DEC.meter 
    WHERE (((DEC.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND DEC.kwh IS NOT NULL) 
    AS DEC16 
+0

のようなものを試してみて、私はただのアクセスは、私は私の入力のテーブルを持っていた私に言っていたので、SELECT * FROM言って最初にSELECTを変更しなければなりませんでした。どうもありがとうございました! –

+0

興味深い...あなたは本当にアクセスを使用している必要があります(私は間違いなくそのタグを削除しましたが、それを再追加しました)。 SQL ServerとMySQLでは、私が提案した構文がサポートされているはずですが、Accessが少し動いていると思います。 – dana

0

:あなたのクエリに適用される

select 
    (select count(*) from table1) as result1, 
    (select count(*) from table2) as result2, 
    .. 

を、それは次のようになりますこのようなものがうまくいくかもしれません:

WITH 
APR16 as (select ... apr16 from ...), 
MAY16 as (select ... may16 from ...), 
JUN16 as (select ... jun16 from ...) 
select apr16,may16,jun16 from APR16, MAY16, JUN16; 

しかし、これは最も優れた解決策ではありません私は思う。いくつかのデータベースはピボット結果をサポートしていますが、ms-access-2016がそれらの中にあるかどうかはわかりません(WITH句をサポートしているかどうかはわかりません)。

0

これは見事に働いたこの

SELECT a.AUG16, b.JUN16 
    FROM 
    (SELECT Sum(AUG.[kwh]) AS AUG16 
    FROM Peak_Times, Meter_Buckets INNER JOIN AUG ON Meter_Buckets.METER = AUG.meter 
    WHERE (((AUG.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND AUG.kwh IS NOT NULL) 
) a 
, 
    (FROM(
    SELECT Sum(JUN.[kwh]) AS JUN16 
    FROM Peak_Times, Meter_Buckets INNER JOIN JUN ON Meter_Buckets.METER = JUN.meter 
    WHERE (((JUN.strdatetime)=[Peak_Times].[strdatetime]) AND ((Meter_Buckets.BUCKET)=1)) AND JUN.kwh IS NOT NULL) 
) b 
関連する問題