私は単純に長い複雑なクエリを破ると思います。ここでは
は(私が本当のものをロードすることはできませんと)私は成功せずGROUP BY
を追加しようとしました**のサンプルクエリですCommon-Table Expressions(CTE)を使用する部品。 WITH
も参照してください。このような
何か:
WITH
CTE1
AS
(
select acc.custaccount, acc.product, acc.invoicedate
from
account acc
join title t on acc.custaccount = t.custaccount
***group by here***
)
,CTE2
AS
(
SELECT ...
FROM
CTE1
Cross apply
(
select number, date
from invoice inv
where inv.custaccount = CTE1.custaccount
group by number, date
) AS A
)
SELECT ...
FROM
CTE2
left join invoicedetail invdet on CTE2.number = invdet.number
outer apply
(
select invdet.number, invdet.units, invdet.value
FROM ...
WHERE ...
group by invdet.number, invdet.units, invdet.value
) AS A
;
ただ、クエリステップバイステップを構築し、各中間CTEの結果を検討します。
第1工程:
With
CTE1
as
(
select fe.snap_name,fe.snap_accountid, fe.snap_entitlementcategory, fe.snap_entitlementcode, fi.invoicenumber, fi.totalamount
from
FilteredInvoice fi
join FilteredSNAP_entitlement fe on fi.accountid = fe.snap_accountid
group by fe.snap_name,fe.snap_accountid, fe.snap_entitlementcategory, fe.snap_entitlementcode, fi.invoicenumber, fi.totalamount
)
SELECT *
FROM CTE1
;
第二ステップ:
With
CTE1
as
(
select fe.snap_name,fe.snap_accountid, fe.snap_entitlementcategory, fe.snap_entitlementcode, fi.invoicenumber, fi.totalamount
from
FilteredInvoice fi
join FilteredSNAP_entitlement fe on fi.accountid = fe.snap_accountid
group by fe.snap_name,fe.snap_accountid, fe.snap_entitlementcategory, fe.snap_entitlementcode, fi.invoicenumber, fi.totalamount
)
SELECT *
FROM
CTE1
CROSS APPLY
(
select number, date
from invoice inv
where inv.custaccount = CTE1.custaccount
group by number, date
) AS A
;
第三ステップ:
With
CTE1
as
(
select fe.snap_name,fe.snap_accountid, fe.snap_entitlementcategory, fe.snap_entitlementcode, fi.invoicenumber, fi.totalamount
from
FilteredInvoice fi
join FilteredSNAP_entitlement fe on fi.accountid = fe.snap_accountid
group by fe.snap_name,fe.snap_accountid, fe.snap_entitlementcategory, fe.snap_entitlementcode, fi.invoicenumber, fi.totalamount
)
,CTE2
AS
(
SELECT *
FROM
CTE1
CROSS APPLY
(
select number, date
from invoice inv
where inv.custaccount = CTE1.custaccount
group by number, date
) AS A
)
SELECT *
FROM CTE2
;
感謝。私は1つから始まり、次に追加します。私は 'と' はエラー「不正な構文が近い取得しています:CTE1 で FilteredInvoice Fiのから選択fe.snap_name、fe.snap_accountid、fe.snap_entitlementcategory、fe.snap_entitlementcode、fi.invoicenumber、fi.totalamount ( としてはFilteredSNAP_entitlementに参加します請求書 – yoda
@yodaとしてfe.snap_name、fe.snap_accountid、fe.snap_entitlementcategory、fe.snap_entitlementcode、fi.invoicenumber、fi.totalamount )によってfi.accountid = fe.snap_accountid グループにFE 、Iは、ステップの詳細な例を追加しました私が心に持っていたこと。 –