如何将多个 table 与一个 table 的基本 ID 结合起来

How to combine multiple tables with the basic ID of one table

我想合并 5 个多个 table,它们与包含所有 ID 的基本 table 具有相同的参考 ID。 “加入的”table 并不包含每个引用的值,但有时它们对一个引用有多个值。输出应该是 ID 的每个值的总和。

示例:

基本Table:

参考 Basic.Value
1 一个
2 b
3 c
4 d
5 e
6 f
7
8 h

Table 1:

参考 T1.Value
1
2 j
2 x
3 k
4 l

Table 2

参考 T2.Value
1
5 n
7 o
7 y
8 p

Table 3

参考 T3.Value
2 q
4 r
6 s
8 t
8 z

应该输出的结果:

参考 Basic.Value SUM(T1.Value) SUM(T2.Value) SUM(T3.Value)
1 一个
2 b (j+x) q
3 c k
4 d l r
5 e n
6 f s
7 (o+y)
8 h p (t+z)

我尝试了以下代码:

SELECT 
T0."STATUS", 
T0."DocNum" AS "ProjectNumber", 
T0."NAME", T0."CARDNAME" AS "Client", 
T0."FINISHED" AS "Project Finished", 
T1."PoPhAmt" AS "Project Value", 
T1."PhBudget" AS "Budget", 
(T1."PoPhAmt"-T1."PhBudget") AS "Planned Gross Profit", 
T1."TotalAP" AS "Ordered", 
SUM(T2."PaidSys") AS "Paid Downpayments(Client)", 
COUNT(T2."PaidSys"), 
SUM(T3."PaidSys") AS "Paid Invoices(Client)", 
COUNT(T3."PaidSys"), 
SUM(T4."PaidSys") AS "Creditnotes(Client)", 
COUNT(T4."PaidSys")

FROM 
(OPMG T0 INNER JOIN PMG8 T1 ON T0."AbsEntry" = T1."AbsEntry") 
LEFT JOIN ODPI T2 ON T0."FIPROJECT" = T2."Project" 
LEFT JOIN OINV T3 ON T0."FIPROJECT" = T3."Project" 
LEFT JOIN ORIN T4 ON T0."FIPROJECT" = T4."Project"


WHERE 
T0."FINISHED" < '100' AND T0."STATUS" <> 'N' AND T0."STATUS" <> 'P'

GROUP BY 
T0."STATUS", 
T0."DocNum", 
T0."NAME", 
T0."CARDNAME", 
T0."FINISHED" , 
T1."PoPhAmt", 
T1."PhBudget", 
T1."TotalAP"

ORDER BY 
T0."DocNum"
 SELECT T.ID,T.VALUE,T1.VALUE T_1_VALUE,T2.VALUE T_2_VALUE,T3.VALUE T_3_VALUE
 FROM BASIC_TABLE T
 LEFT JOIN TABLE_1  T1 ON T.ID=T1.ID
 LEFT JOIN TABLE_2  T2 ON T.ID=T2.ID
 LEFT JOIN TABLE_3  T3 ON T.ID=T3.ID

使用以下查询 STRING_AGG 函数和分组依据 Basic_Table.Reference

SELECT 
      T.Reference,
      MAX(T.Basic_Value) AS Basic_Value,
      SUM(T1.T1_Value) AS T1_Value,
      SUM(T2.T2_Value) AS T2_Value,
      SUM(T3.T3_Value) AS T3_Value
FROM BASIC_TABLE T
LEFT JOIN TABLE_1  T1 ON T.Reference=T1.Reference
LEFT JOIN TABLE_2  T2 ON T.Reference=T2.Reference
LEFT JOIN TABLE_3  T3 ON T.Reference=T3.Reference
GROUP BY T.Reference

加入前汇总:

select *
from basic_table t left join
     (select t1.project, count(*) as cnt1, sum(value) as value1
      from t1
      group by t1.project
     ) t1
     on t.FIPROJECT = T1.Project left join
     (select t2.project, count(*) as cnt2, sum(value) as value2
      from t2
      group by t2.project
     ) t2
     on t.FIPROJECT = T2.Project left join
     (select t3.project, count(*) as cnt3, sum(value) as value3
      from t3
      group by t3.project
     ) t3
     on t.FIPROJECT = T3.Project;
WITH BASIC_TABLE(REFERENCE,BASIC_VALUE) AS
(

 SELECT 1,  'a' UNION ALL
 SELECT 2 , 'b' UNION ALL
 SELECT 3 , 'c' UNION ALL
 SELECT 4 , 'd' UNION ALL
 SELECT 5 , 'e' UNION ALL
 SELECT 6 , 'f' UNION ALL
 SELECT 7 , 'g' UNION ALL
 SELECT 8 , 'h'
),
TABLE_1(REFERENCE,T1_VALUE) AS
(
  SELECT 1,     'i' UNION ALL
  SELECT 2,     'j' UNION ALL
  SELECT 2,     'x' UNION ALL
  SELECT 3,     'k' UNION ALL
  SELECT 4,     'l'  
),
TABLE_2(REFERENCE,T2_VALUE)AS
(
   SELECT  1,   'm' UNION ALL
   SELECT 5, 'n' UNION ALL
   SELECT 7,    'o' UNION ALL
   SELECT 7, 'y' UNION ALL
   SELECT 8 ,   'p'
),
TABLE_3(REFERENCE,T3_VALUE)AS
(
    SELECT 2,   'q' UNION ALL
    SELECT 4,   'r' UNION ALL
    SELECT 6,   's' UNION ALL
    SELECT 8,   't' UNION ALL
    SELECT 8,   'z'
)
SELECT B.REFERENCE,B.BASIC_VALUE,ISNULL(T1.R,'')AS SUM_T_1_VALUE,ISNULL(T2.R,'')AS SUM_T_2_VALUE,
 ISNULL(T3.R,'')AS SUM_T_3_VALUE
 FROM BASIC_TABLE AS B
 LEFT JOIN
 (
    SELECT T.REFERENCE,STRING_AGG(T.T1_VALUE,'+')R
    FROM TABLE_1 AS T
    GROUP BY T.REFERENCE
 )T1 ON B.REFERENCE=T1.REFERENCE
LEFT JOIN
(
  SELECT T.REFERENCE,STRING_AGG(T.T2_VALUE,'+')R
   FROM TABLE_2 AS T
    GROUP BY T.REFERENCE
)T2 ON B.REFERENCE=T2.REFERENCE
LEFT JOIN
(
   SELECT T.REFERENCE,STRING_AGG(T.T3_VALUE,'+')R
   FROM TABLE_3 AS T
   GROUP BY T.REFERENCE
)T3 ON B.REFERENCE=T3.REFERENCE

不确定 SAP HANA,但在 MS SQL Server 2017 中此代码或多或少会产生所需的输出