为什么我的sql在使用Max函数时不能使用Abs函数?

时间:2013-08-02 07:47:43

标签: mysql sql ms-access access-vba

我有一张表[tblFull1 04WoodsideTransportV335],所有数据都来自。我想获得[数据位置]和[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;

1 个答案:

答案 0 :(得分:1)

在SQL中,在“HAVING”语句中,您只能使用“GROUP BY”中定义的列。对于其他列,您必须在聚合函数中使用,它们是:   - AVG() - 返回平均值   - COUNT() - 返回行数   - FIRST() - 返回第一个值   - LAST() - 返回最后一个值   - MAX() - 返回最大值   - MIN() - 返回最小值   - SUM() - 返回总和