2

現在、データベース内のいくつかの販売エリアの値を報告する必要があるという問題があります。これの 2 番目の `SELECT は、私が知りたいことを与えてくれます。最初の部分も、私が知りたいことを与えてくれます。しかし、最初のクエリの結果を2番目の行として表示する方法が可能かどうか興味があります...

@something2 番目に追加SELECTすると、列として表示され、次のような結果が得られます。

TOTAL     | CATEGORY    | (NO COLUMN NAME)
-------------------------------------------
70000.11  | CATEGORY 1  | 118500
31200.11  | CATEGORY 2  | 118500
51114.11  | CATEGORY 3  | 118500
2215.11   | CATEGORY 4  | 118500
54321.11  | CATEGORY 5  | 118500

しかし、基本的には、結果にそれを挿入できるかどうかを調べたいので、次のように表示されます。

TOTAL     | CATEGORY  
----------------------
70000.11  | CATEGORY 1
31200.11  | CATEGORY 2
51114.11  | CATEGORY 3
2215.11   | CATEGORY 4
54321.11  | CATEGORY 5
118500.00 | SOMETHING

列名などを変更したので、混乱しないことを願っています。一時テーブルを生成し、それに値をプルして、それに INSERT INTO @myTable を実行しようと考えましたか? 私はそれに少し慣れていますが、それが最も効率的な方法かどうかはわかりません。

最終的に、これはストアド プロシージャに移行します。

USE Database1
GO
DECLARE @something NUMERIC
SET @something = (SELECT 
        ABS(SUM(ENTRY_AMT)) AS 'Total'

    FROM 
        Invoices AS gl

        LEFT JOIN Orders AS iod ON gl.ORDER_NO = iod.ORDER_NO AND gl.LINE_NO = iod.LINE_NO AND gl.APPEND = iod.APPEND

    WHERE 
        gl.YR = 13 
        AND gl.PERIOD = 1 
        AND ENTRY_SRC = 'revenue' 
        AND iod.CATEGORY_DESC IN ('GENERAL', 'OTHER', 'RANDOM') 

        AND (gl.GL_ACCOUNT_NO BETWEEN 7100000000 AND 7100999999)
        AND gl.ITEM_NO NOT LIKE '%RS'
        AND gl.ITEM_NO NOT LIKE '%RA'
)


(SELECT 
    ABS(SUM(ENTRY_AMT)) AS 'Total', 
    CATEGORY_DESC AS 'Category'


FROM 
    Invoices AS gl

    LEFT JOIN Orders AS iod ON gl.ORDER_NO = iod.ORDER_NO AND gl.LINE_NO = iod.LINE_NO AND gl.APPEND = iod.APPEND

WHERE 
        gl.YR = 13 
    AND gl.PERIOD = 1 
    AND ENTRY_SRC = 'revenue' 
    AND iod.CATEGORY_DESC NOT IN ('GENERAL', 'OTHER', 'RANDOM') 

    AND (gl.GL_ACCOUNT_NO BETWEEN 7100000000 AND 7100999999)
    AND gl.ITEM_NO NOT LIKE '%RS'
    AND gl.ITEM_NO NOT LIKE '%RA'


GROUP BY CATEGORY_DESC
)   
4

2 に答える 2

1

@何かが残りの合計または類似のものではないと仮定すると、その場合、@xQbertが提案したようなグループ化セットとキューブを調べたいと思います。そうでない場合は、これを試してください。

<-- Your Query Here -->
UNION ALL -- Make sure it's a UNION ALL not a UNION or you will lose duplicate rows.
SELECT @Something AS Total, 'Something' AS Category
于 2013-02-21T23:20:57.277 に答える
1
    USE Database1
    GO
(SELECT 
                ABS(SUM(ENTRY_AMT)) AS 'Total',
'All' as Category

        FROM 
            Invoices AS gl

            LEFT JOIN Orders AS iod ON gl.ORDER_NO = iod.ORDER_NO AND gl.LINE_NO = iod.LINE_NO AND gl.APPEND = iod.APPEND

        WHERE 
            gl.YR = 13 
            AND gl.PERIOD = 1 
            AND ENTRY_SRC = 'revenue' 
            AND iod.CATEGORY_DESC IN ('GENERAL', 'OTHER', 'RANDOM') 

            AND (gl.GL_ACCOUNT_NO BETWEEN 7100000000 AND 7100999999)
            AND gl.ITEM_NO NOT LIKE '%RS'
            AND gl.ITEM_NO NOT LIKE '%RA'
    )
    UNION

    (SELECT 
        ABS(SUM(ENTRY_AMT)) AS 'Total', 
        CATEGORY_DESC AS 'Category'


    FROM 
        Invoices AS gl

        LEFT JOIN Orders AS iod ON gl.ORDER_NO = iod.ORDER_NO AND gl.LINE_NO = iod.LINE_NO AND gl.APPEND = iod.APPEND

    WHERE 
            gl.YR = 13 
        AND gl.PERIOD = 1 
        AND ENTRY_SRC = 'revenue' 
        AND iod.CATEGORY_DESC NOT IN ('GENERAL', 'OTHER', 'RANDOM') 

        AND (gl.GL_ACCOUNT_NO BETWEEN 7100000000 AND 7100999999)
        AND gl.ITEM_NO NOT LIKE '%RS'
        AND gl.ITEM_NO NOT LIKE '%RA'


    GROUP BY CATEGORY_DESC

)

または、これは簡単だと思います...

    (SELECT 
        ABS(SUM(ENTRY_AMT)) AS 'Total', 
        CATEGORY_DESC AS 'Category'


    FROM 
        Invoices AS gl

        LEFT JOIN Orders AS iod ON gl.ORDER_NO = iod.ORDER_NO AND gl.LINE_NO = iod.LINE_NO AND gl.APPEND = iod.APPEND

    WHERE 
            gl.YR = 13 
        AND gl.PERIOD = 1 
        AND ENTRY_SRC = 'revenue' 
        AND iod.CATEGORY_DESC NOT IN ('GENERAL', 'OTHER', 'RANDOM') 

        AND (gl.GL_ACCOUNT_NO BETWEEN 7100000000 AND 7100999999)
        AND gl.ITEM_NO NOT LIKE '%RS'
        AND gl.ITEM_NO NOT LIKE '%RA'


    GROUP BY Grouping sets ((CATEGORY_DESC),())
    )   
于 2013-02-21T23:21:11.057 に答える