0

次のSQLクエリがあります。内部の仕組みを削除しましたが、結果のブラック ボックス効果を示しました。

クエリ全体が本来の {0,10,5,-2,10} を返さず、代わりに {0,0,0,0,0} を返し、パーティションバイラインが影響している理由を理解できません???

条件を除外すると、WHERE rn = 1正しく機能します。したがって、何らかの理由で行番号が正しく表示されません。

この問題は、何らかの理由で値 {0,10,5,-2,10} に固有のものだと思います。この関数を異なるパラメーターで呼び出すと、値が正常に返されるためです。

SELECT  Col1, isnull(Col2,0) AS Col11, isnull(Col4,0) AS Col4, isnull(q.Col3,0) AS Col3, isnull(q.Col5,0) AS Col5
FROM    
(
    SELECT * , ROW_NUMBER() OVER (PARTITION BY Col1 ORDER BY Col5 ASC, Col3 ASC) rn
    FROM 

    (SELECT 0 AS  Col1, tab34.Col2, tab34.Col4, tab34.Col3, Col5 FROM
            (SELECT PST FROM Func2('x','y')) tab3
        LEFT JOIN

            (SELECT Col2, Col4,Col3,abs(tab33.Value + Col6) AS Value, Col7 AS Col5 FROM

                (SELECT tab11.Col2, tab11.Col4, tab11.Col3, Value FROM
                    (SELECT Col2, Col4, Col3 FROM Table2 WHERE Col8 = 'y' AND Col10 = 1) tab22
                JOIN
                    (SELECT Col2, sum(Value) AS Value, Col4, Col3 FROM Table1 WHERE Col9 = 'x' AND Col8 = 'y' GROUP BY Col2, Col4, Col3) tab11
                ON tab11.Col2 = tab22.Col2 AND tab11.Col4 = tab22.Col4 AND tab11.Col3 = tab22.Col3
                WHERE Value < 0) tab33

            JOIN
                (SELECT Col11, Col6, Col7 FROM dbo.Func1('x','y')) Shifts
            ON Shifts.Col11 = tab33.Col2) tab34 

        ON tab3.PST = tab34.Value
    ) VolData
) q
WHERE   rn = 1
4

1 に答える 1

0

これはばかげた答えかもしれませんが、そうであれば許してください。

行番号はゼロベースですか? where 句を次のように変更するとどうなりますか。

WHERE rn = 0

?

編集:行に「AS」が欠落している可能性があることにも気付きました:

SELECT * , ROW_NUMBER() OVER (PARTITION BY Col1 ORDER BY Col5 ASC, Col3 ASC) rn

それは次のとおりです。

SELECT * , ROW_NUMBER() OVER (PARTITION BY Col1 ORDER BY Col5 ASC, Col3 ASC) AS rn
于 2012-06-08T14:11:16.780 に答える