1

すべてのデータの元になるテーブル [tblFull1 04WoodsideTransportV335] があります。[Data Location] と [load_case] を取得したいと考えています。応力は Max、Min、または Abs のいずれかです。Max と Min で動作します。しかし、何らかの理由で Abs では機能しません。ms Access 2013 で実行されています。vba を使用してプログラムでクエリを生成します。

Abs と max、min 演算子の間に違いがあり、機能しませんか?

Abs クエリを実行すると、何らかの理由で "As Expr1" が表示されますが、なぜそれを行うのでしょうか?

SQL が見栄えが悪いことはわかっていますが、機能します。改善方法などありましたら教えてください。

私の悪い英語で申し訳ありません。私はノルウェー人です。

MAX 関数を使用した SQL:

SELECT DISTINCT 
    t1.[load_case], t2.[Data Location] AS Nodenr, 
    t2.[MaxOfHoop Stress N/mm^2]
FROM 
    [tblFull1 04WoodsideTransportV335] AS t1,
    (SELECT 
         [tblFull1 04WoodsideTransportV335].[Data Location],
         MAX([tblFull1 04WoodsideTransportV335].[Hoop Stress N/mm^2]) AS [MaxOfHoop Stress N/mm^2]
     FROM 
         [tblFull1 04WoodsideTransportV335]
     GROUP BY 
         [tblFull1 04WoodsideTransportV335].[Data Location]
     HAVING ((([tblFull1 04WoodsideTransportV335].[Data Location])
        In (SELECT [Data Location]
            FROM [tblFull1 04WoodsideTransportV335]
            GROUP BY [Data Location]
            HAVING Count(*) > 1)) 
       AND ((MAX([tblFull1 04WoodsideTransportV335].[Hoop Stress N/mm^2])) Is Not Null))
     ORDER BY 
         [tblFull1 04WoodsideTransportV335].[Data Location]) AS t2
WHERE 
    ((t1.[Hoop Stress N/mm^2]) = [t2].[MaxOfHoop Stress N/mm^2])
ORDER BY 
    t1.[load_case] DESC;

Abs 関数を使用した SQL:

SELECT DISTINCT 
    t1.load_case, t2.[Data Location] AS Nodenr, 
    t2.[AbsOfHoop Stress N/mm^2] AS Expr1
FROM 
    [tblFull1 04WoodsideTransportV335] AS t1,
    (SELECT 
         [tblFull1 04WoodsideTransportV335].[Data Location],
         ABS([tblFull1 04WoodsideTransportV335].[Hoop Stress N/mm^2]) AS[AbsOfHoop Stress N/mm^2]
     FROM [tblFull1 04WoodsideTransportV335]
     GROUP BY [tblFull1 04WoodsideTransportV335].[Data Location]
     HAVING ((([tblFull1 04WoodsideTransportV335].[Data Location])
                In (SELECT [Data Location]
                    FROM [tblFull1 04WoodsideTransportV335] 
                    GROUP BY [Data Location]
                    HAVING Count(*) > 1)) 
        AND ((ABS([tblFull1 04WoodsideTransportV335].[Hoop Stress N/mm^2])) Is Not Null))
     ORDER BY 
         [tblFull1 04WoodsideTransportV335].[Data Location]) AS t2
WHERE 
    (((t1.[Hoop Stress N/mm^2])=[t2].[AbsOfHoop Stress N/mm^2]))
ORDER BY 
    t1.load_case DESC;
4

1 に答える 1

1

SQLでは、「HAVING」ステートメントでは、「GROUP BY」で定義された列のみを使用できます。その他の列については、次の集計関数内で then を使用する必要があります。 - AVG() - 平均値を返します - COUNT() - 行数を返します - FIRST() - 最初の値を返します - LAST() -最後の値 - MAX() - 最大値を返す - MIN() - 最小値を返す - SUM() - 合計を返す

于 2013-08-02T07:56:04.413 に答える