これがテーブル定義であり、これが結果の宛先テーブルになります
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_ACCOUNTING
ID_CUSTOMER
ACCOUNT_POSITION
Amount
通常、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_POSITION
2つある場合は、同じで量が異なるAmounts
2つのレコードをテーブルに作成する必要があります。CONTRIBUTION_MARGIN_ACCOUNTING
ID_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]
コメントを追加