0

これをCF9とMsSQL2005でテストしました

CREATE TABLE HAVING_SUM
(
    A_VARCHAR VARCHAR(5),
    B_INT INT
)

INSERT INTO HAVING_SUM ( A_VARCHAR, B_INT ) VALUES ( 'AB', 2 )
INSERT INTO HAVING_SUM ( A_VARCHAR, B_INT ) VALUES ( 'AB', 3 )
INSERT INTO HAVING_SUM ( A_VARCHAR, B_INT ) VALUES ( 'AB', 5 )
INSERT INTO HAVING_SUM ( A_VARCHAR, B_INT ) VALUES ( 'CD', 2 )
INSERT INTO HAVING_SUM ( A_VARCHAR, B_INT ) VALUES ( 'CD', 7 )
INSERT INTO HAVING_SUM ( A_VARCHAR, B_INT ) VALUES ( 'CD', 8 )
INSERT INTO HAVING_SUM ( A_VARCHAR, B_INT ) VALUES ( 'CD', NULL)

次に、Ms SQL Server ManagementStudioExpressでクエリを実行します

SELECT  *
FROM    HAVING_SUM

SELECT  A_VARCHAR,
        SUM(B_INT) AS B_INT
FROM    HAVING_SUM
GROUP BY A_VARCHAR

SELECT  A_VARCHAR,
        SUM(B_INT) AS B_INT
FROM    HAVING_SUM
GROUP BY A_VARCHAR
HAVING SUM(B_INT) = 10

SELECT  A_VARCHAR,
        SUM(B_INT) AS B_INT
FROM    HAVING_SUM
GROUP BY A_VARCHAR
HAVING SUM(B_INT) = 10.5

結果は

代替テキスト

次に、cfqueryを使用してみました

<cfquery name="qryHavingSum_1">
SELECT  *
FROM    HAVING_SUM
</cfquery>

<cfdump var="#qryHavingSum_1#">

<cfquery name="qryHavingSum_2">
SELECT  A_VARCHAR,
        SUM(B_INT) AS B_INT
FROM    HAVING_SUM
GROUP BY A_VARCHAR
</cfquery>

<cfdump var="#qryHavingSum_2#">

<cfquery name="qryHavingSum_3">
SELECT  A_VARCHAR,
        SUM(B_INT) AS B_INT
FROM    HAVING_SUM
GROUP BY A_VARCHAR
HAVING SUM(B_INT) = 10
</cfquery>

<cfdump var="#qryHavingSum_3#">

<cfquery name="qryHavingSum_4">
SELECT  A_VARCHAR,
        SUM(B_INT) AS B_INT
FROM    HAVING_SUM
GROUP BY A_VARCHAR
HAVING SUM(B_INT) = 10.5
</cfquery>

<cfdump var="#qryHavingSum_4#">

結果は

代替テキスト 代替テキスト

編集(ここから開始):デバッガーまで下にスクロールしますこれがあります

代替テキスト

その赤い領域は、qryHavingSum_4が実行され、レコードが0であることを示していますが、例外セクションではqryHavingSum_4が未定義です(<cfdump var="#qryHavingSum_4#">編集(ここで終了)

qryHavingSum_4をに変更した場合

<cfquery name="qryHavingSum_4">
SELECT  A_VARCHAR,
        SUM(ISNULL(B_INT, 0)) AS B_INT
FROM    HAVING_SUM
GROUP BY A_VARCHAR
HAVING SUM(ISNULL(B_INT, 0)) = 10.5
</cfquery>

結果は

代替テキスト

次に、他の演算子を使用して( ISNULLなしSUM(B_INT)で)および(ISNULLなしで)変更しようとしましたが、機能します。HAVING SUM(B_INT)> >= < <= <> !=

=上記のwithクエリをCFで使用できないのはなぜですか?CFbugsですか?

ありがとうございました

4

1 に答える 1

4

Management Studioはnullを取り除きます(実行すると、[メッセージ]タブを確認すると、次のように表示されます)

Warning: Null value is eliminated by an aggregate or other SET operation.

coldfusionmssqlドライバーはそうではありません。

isnull関数を使用するのが最善の方法です。

または、cfqueryでansi警告を無効にし、実行後に再度有効にすることができます。したがって、クエリ4を次のように変更できます。

SET ANSI_WARNINGS OFF
SELECT  A_VARCHAR,
        SUM(B_INT) AS B_INT
FROM    HAVING_SUM
GROUP BY A_VARCHAR
HAVING SUM(B_INT)=10.5
SET ANSI_WARNINGS ON
于 2011-01-04T12:08:41.400 に答える