サブクエリから返される結果行と外部クエリ結果の数だけテーブルに挿入します

Sajin Sajin

これがテーブル定義であり、これが結果の宛先テーブルになります

CREATE TABLE [dbo]。[ 
    CONTRIBUTION_MARGIN_ACCOUNTING ]([ID_CONTRIBUTION_MARGIN_ACCOUNTING] [INT] IDENTITY(
   1000001、1 )NOT NULL 、[ID_CUSTOMER_ACCOUNT_POSITION] [INT] NOT NULL 
   、[TYP] [CHAR](1)NULL 
   、[CREDIT_TYP] [CHAR ](1)NULL 
   、[BILL_DATE] [DATETIME] NULL 
   、[BILL_NO] [NVARCHAR](20)NULL 
   、[POSITION] [SMALLINT] NULL 
   、[CUSTOMER_NO] [NVARCHAR](255)NULL 
   、[CHARGE] [NVARCHAR] (20)NULL  
   、[金額] [DECIMAL](18、6)NULL
   、CONSTRAINT [PK_CONTRIBUTION_MARGIN_ACCOUNTING]プライマリキーがクラスター化されました(
        [ID_CONTRIBUTION_MARGIN_ACCOUNTING] ASC 
    )WITH(PAD_INDEX = OFF 
           、STATISTICS_NORECOMPUTE = OFF 
           、IGNORE_DUP_KEY = OFF 
           、ALLOW_ROW_LOCKS = ON 
           、ALLOW_PAGE_LOCKS = ON)ON [PRIMARY] 
    )ON [PRIMARY] 
GO 

ALTER TABLE [ 
    d [CustomerAccountPosition_CONTRIBUTION_MARGIN_ACCOUNTING] 
    FOREIGN KEY([ID_CUSTOMER_ACCOUNT_POSITION])
    REFERENCES [dbo]。[CUSTOMER_ACCOUNT_POSITION]([ID_CUSTOMER_ACCOUNT_POSITION])
    ON DELETE CASCADE 
GO

要件は次のとおりです。一意の組み合わせ同じ数の新しいレコードがテーブルに挿入され、サブクエリで検出されます。CONTRIBUTION_MARGIN_ACCOUNTINGID_CUSTOMER ACCOUNT_POSITIONAmount

通常、Subquery複数の行が返されるため、以下のクエリではエラーが発生します

SELECT krp.ID_CUSTOMER_ACCOUNT_POSITION 
      、kr.RECEIPT_TYP AS TYP 
      、krp.CALCULATION_TYP AS CREDIT_TYP 
      、kr.BILL_DATE AS BILL_DATE 
      、kr.NO AS BILL_NO 
      、krp.POSITION AS POSITION 
      、kun.NO AS CUSTOMER_NO 
      、(
        THEN(SELECT mge.CHARGE_NO AS chr 
                    、SUM(loadingPackage.AMOUNT)AS Amount 
              FROM dbo.LOADING_PACKAGE AS LoadingPackage 
              INNER JOIN dbo.MATERIAL_COMPONENT AS mbe ON LoadingPackage.ID_MATERIAL_COMPONENT = mbe.ID_MATERIAL_COMPONENT 
              INNER JOINdbo。 mge.ID_MATERIAL_COMPONENT
              loadingPackage.ID_DELIVERY_POSITION = DELIVERYPosition.ID_DELIVERY_POSITION WHERE 
                   INNER JOIN dbo.MATERIAL_PACK AS mge ON mbe.ID_MATERIAL_COMPONENT = mge.ID_MATERIAL_COMPONENT
              GROUP BY mge.CHARGE_NO 
                      、loadingPackage.ID_CUSTOMER_ACCOUNT_POSITION 
             Krp.ID_DELIVERY_POSITIONがNULLの場合
             (SELECT mge.CHARGE_NO AS ch 
                         、SUM(loadingPackage.AMOUNT)AS Amount 
                   FROM dbo.LOADING_PACKAGE AS LoadingPackage 
                   INNER JOINDbo。 = mbe.ID_MATERIAL_COMPONENT 
                   WHERE loadPackage.ID_CUSTOMER_ACCOUNT_POSITION = krp.ID_CUSTOMER_ACCOUNT_POSITION 
                   GROUP BY mge.CHARGE_NO 
                           、loadingPackage.ID_CUSTOMER_ACCOUNT_POSITION 
            ELSE 
                NULLの
            END)などの電荷
dbo.CUSTOMER ACCOUNT_POSITION AS KRP FROM 
INNER dbo.CUSTOMERアカウントとしてKR ON kr.ID_CUSTOMER_ACCOUNT = krp.ID_CUSTOMERアカウントJOIN 
LEFT OUTERはkrp.ID_CUSTOMER_ACCOUNT_POSITION = deck.ID_CUSTOMER_ACCOUNT_POSITION ON dbo.AMOUNT ASデッキJOIN 
DBOを左外部結合を.DELIVERY_POSITION AS DELIVERYPosition ON krp.ID_DELIVERY_POSITION = DELIVERYPosition.ID_DELIVERY_POSITION 
LEFT OUTER JOIN dbo.CUSTOMER AS kun ON kun.ID_CUSTOMER = kr.ID_CUSTOMER 
WHERE deck.ID_CUSTOMER_ACCOUNT_POSITION IS NULL
AND kr.STATUS = 'A';

これを実現する方法がわからない、例:ID_CUSTOMER ACCOUNT_POSITION2つある場合、同じで量が異なるAmounts2つのレコードをテーブルに作成する必要がありますCONTRIBUTION_MARGIN_ACCOUNTINGID_CUSTOMER ACCOUNT_POSITION

サンプルデータ

ここに画像の説明を入力してください

イワン・スタロスチン

したがって、これらのサブクエリをfrom分割して、参加してください。

SELECT ...
      ,ISNULL(charge_dlvr.CHARGE_NO, charge_pkg.CHARGE_NO) AS CHARGE_NO
      ,ISNULL(charge_dlvr.Amount, charge_pkg.Amount) AS Amount
FROM dbo.CUSTOMER ACCOUNT_POSITION AS krp
...
OUTER APPLY
(SELECT mge.CHARGE_NO
                    ,SUM(loadingPackage.AMOUNT) AS Amount
              FROM dbo.LOADING_PACKAGE AS loadingPackage
              INNER JOIN dbo.MATERIAL_COMPONENT AS mbe ON loadingPackage.ID_MATERIAL_COMPONENT = mbe.ID_MATERIAL_COMPONENT
              INNER JOIN dbo.MATERIAL_PACK AS mge ON mbe.ID_MATERIAL_COMPONENT = mge.ID_MATERIAL_COMPONENT
              WHERE loadingPackage.ID_DELIVERY_POSITION = DELIVERYPosition.ID_DELIVERY_POSITION
              GROUP BY mge.CHARGE_NO
                      ,loadingPackage.ID_CUSTOMER_ACCOUNT_POSITION
) charge_dlvr
OUTER APPLY
(SELECT mge.CHARGE_NO
                         ,SUM(loadingPackage.AMOUNT) AS Amount
                   FROM dbo.LOADING_PACKAGE AS loadingPackage
                   INNER JOIN dbo.MATERIAL_COMPONENT AS mbe ON loadingPackage.ID_MATERIAL_COMPONENT = mbe.ID_MATERIAL_COMPONENT
                   INNER JOIN dbo.MATERIAL_PACK AS mge ON mbe.ID_MATERIAL_COMPONENT = mge.ID_MATERIAL_COMPONENT
                   WHERE loadingPackage.ID_CUSTOMER_ACCOUNT_POSITION = krp.ID_CUSTOMER_ACCOUNT_POSITION
                     AND krp.ID_DELIVERY_POSITION IS NULL
                   GROUP BY mge.CHARGE_NO
                           ,loadingPackage.ID_CUSTOMER_ACCOUNT_POSITION
) charge_pkg
WHERE deck.ID_CUSTOMER_ACCOUNT_POSITION IS NULL

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

選択クエリの結果ごとに異なるテーブルに挿入します

分類Dev

クエリ結果をテーブルに挿入する

分類Dev

一時テーブルに挿入されたSQLクエリの結果

分類Dev

クエリのすべての結果をテーブルに挿入する

分類Dev

クエリ結果を一時テーブルに挿入します

分類Dev

クエリ結果をテーブルに挿入します-SQLServer Management Studio

分類Dev

Mysql 2つのテーブルを1つの出力に結合しますが、結果のサブクエリは複数の行を返します

分類Dev

クエリ結果を既存のBigQueryテーブルに挿入する

分類Dev

withcteクエリの結果を一時テーブルに挿入する

分類Dev

リンクされたテーブルに対するPDOODBCクエリは結果を返しません

分類Dev

サブクエリのmin()結果を使用すると、複数のレコードが返されます

分類Dev

mysql-クエリの結果を結合を使用して同じテーブルに挿入します

分類Dev

ハイブ挿入は、結果として列数の内部サブクエリでテーブルを上書きします

分類Dev

異なるテーブルからの複数のクエリ結果を1つのクエリ結果テーブルに結合する

分類Dev

SQLクエリを作成して複数のテーブルから全文検索を実行し、さまざまなテーブルからの結果を結合するにはどうすればよいですか?

分類Dev

結合されたテーブルから上位5行を選択して、より大きなクエリの結果にしますか?

分類Dev

結果が外部テーブルの複数の値によってフィルタリングされるMySQL結合/サブクエリ

分類Dev

PowerShell を使用して SQL クエリを実行し、結果をテーブルに挿入する

分類Dev

複数のwhere句が1つの結果テーブルに複数の結果行を返すselectクエリがありますか?

分類Dev

SQL:サブクエリの結果を列に挿入します

分類Dev

サブクエリは複数の行を返します。SQLselectを使用して別のテーブルの結果を更新する

分類Dev

既存のSQL結果に対してクエリを実行しますか?SQL結果のサブセットから結果を検索する

分類Dev

クエリ結果を文字列にキャストしてテーブル行に挿入するにはどうすればよいですか?

分類Dev

サブクエリがpostgresの結果を返す場合にのみテーブルを更新します

分類Dev

クエリ結果を使用して2番目のテーブルに挿入します-Codeigniter

分類Dev

クエリの結果を既存のテーブルに挿入しています

分類Dev

クエリの結果を新しいテーブルに取得し、SQLサーバーでそのテーブルからクエリを作成します

分類Dev

SELECTクエリの結果ごとに3つの新しい行を同じテーブルに挿入する方法

分類Dev

MySQL:複数のサブクエリの結果を選択すると、「サブクエリは複数の行を返します」

Related 関連記事

  1. 1

    選択クエリの結果ごとに異なるテーブルに挿入します

  2. 2

    クエリ結果をテーブルに挿入する

  3. 3

    一時テーブルに挿入されたSQLクエリの結果

  4. 4

    クエリのすべての結果をテーブルに挿入する

  5. 5

    クエリ結果を一時テーブルに挿入します

  6. 6

    クエリ結果をテーブルに挿入します-SQLServer Management Studio

  7. 7

    Mysql 2つのテーブルを1つの出力に結合しますが、結果のサブクエリは複数の行を返します

  8. 8

    クエリ結果を既存のBigQueryテーブルに挿入する

  9. 9

    withcteクエリの結果を一時テーブルに挿入する

  10. 10

    リンクされたテーブルに対するPDOODBCクエリは結果を返しません

  11. 11

    サブクエリのmin()結果を使用すると、複数のレコードが返されます

  12. 12

    mysql-クエリの結果を結合を使用して同じテーブルに挿入します

  13. 13

    ハイブ挿入は、結果として列数の内部サブクエリでテーブルを上書きします

  14. 14

    異なるテーブルからの複数のクエリ結果を1つのクエリ結果テーブルに結合する

  15. 15

    SQLクエリを作成して複数のテーブルから全文検索を実行し、さまざまなテーブルからの結果を結合するにはどうすればよいですか?

  16. 16

    結合されたテーブルから上位5行を選択して、より大きなクエリの結果にしますか?

  17. 17

    結果が外部テーブルの複数の値によってフィルタリングされるMySQL結合/サブクエリ

  18. 18

    PowerShell を使用して SQL クエリを実行し、結果をテーブルに挿入する

  19. 19

    複数のwhere句が1つの結果テーブルに複数の結果行を返すselectクエリがありますか?

  20. 20

    SQL:サブクエリの結果を列に挿入します

  21. 21

    サブクエリは複数の行を返します。SQLselectを使用して別のテーブルの結果を更新する

  22. 22

    既存のSQL結果に対してクエリを実行しますか?SQL結果のサブセットから結果を検索する

  23. 23

    クエリ結果を文字列にキャストしてテーブル行に挿入するにはどうすればよいですか?

  24. 24

    サブクエリがpostgresの結果を返す場合にのみテーブルを更新します

  25. 25

    クエリ結果を使用して2番目のテーブルに挿入します-Codeigniter

  26. 26

    クエリの結果を既存のテーブルに挿入しています

  27. 27

    クエリの結果を新しいテーブルに取得し、SQLサーバーでそのテーブルからクエリを作成します

  28. 28

    SELECTクエリの結果ごとに3つの新しい行を同じテーブルに挿入する方法

  29. 29

    MySQL:複数のサブクエリの結果を選択すると、「サブクエリは複数の行を返します」

ホットタグ

アーカイブ