Sql 如何根据父列值为所有子记录(包括父记录)填充事实列(屏幕截图)

Sql 如何根据父列值为所有子记录(包括父记录)填充事实列(屏幕截图),sql,sql-server,azure-synapse,Sql,Sql Server,Azure Synapse,如何为所有行(父行+子行)生成事实列?对于所有其他7行,父级的RefTotalTransAmountPackage列应与DistributedPercentage列相乘 假设我理解您的请求,您可以尝试以下方法: DECLARE @tempFactItemTagsAssignment table ( ID int, ParentOrderItemID int, RefTotalTransAmountPackage decimal(18,4), DistributedPercentage d

如何为所有行(父行+子行)生成事实列?对于所有其他7行,父级的
RefTotalTransAmountPackage
列应与
DistributedPercentage
列相乘


假设我理解您的请求,您可以尝试以下方法:

DECLARE @tempFactItemTagsAssignment table (
    ID int, ParentOrderItemID int, RefTotalTransAmountPackage decimal(18,4), DistributedPercentage decimal(18,2)
);

INSERT INTO @tempFactItemTagsAssignment VALUES
    ( 382904448, 382904445, 0, 0 ),
    ( 382904446, 382904445, 0, 27.49 ),
    ( 382904446, 382904445, 0, 27.49 ),
    ( 382904446, 382904445, 0, 0.83 ),
    ( 382904446, 382904445, 0, 27.49 ),
    ( 382904445, NULL, 77.99, 16.70 ),
    ( 382904447, 382904445, 0, 0 );

DECLARE @ParentId int = 382904445;

SELECT
    x.ID,
    x.ParentOrderItemID,
    x.RefTotalTransAmountPackage,
    x.DistributedPercentage,
    p.ParentRefTotal,
    CAST ( ( p.ParentRefTotal * ( x.DistributedPercentage / 100 ) ) AS decimal(18,2) ) AS Fact
FROM @tempFactItemTagsAssignment AS x
OUTER APPLY (

    SELECT RefTotalTransAmountPackage AS ParentRefTotal FROM @tempFactItemTagsAssignment AS n
        WHERE n.ID = @ParentId AND n.ParentOrderItemID IS NULL

) AS p
WHERE
    x.ID = @ParentId OR x.ParentOrderItemID = @ParentId
ORDER BY
    ID;
返回

+-----------+-------------------+----------------------------+-----------------------+----------------+-------+
|    ID     | ParentOrderItemID | RefTotalTransAmountPackage | DistributedPercentage | ParentRefTotal | Fact  |
+-----------+-------------------+----------------------------+-----------------------+----------------+-------+
| 382904445 | NULL              | 77.9900                    | 16.70                 | 77.9900        | 13.02 |
| 382904446 | 382904445         | 0.0000                     | 27.49                 | 77.9900        | 21.44 |
| 382904446 | 382904445         | 0.0000                     | 27.49                 | 77.9900        | 21.44 |
| 382904446 | 382904445         | 0.0000                     | 0.83                  | 77.9900        | 0.65  |
| 382904446 | 382904445         | 0.0000                     | 27.49                 | 77.9900        | 21.44 |
| 382904447 | 382904445         | 0.0000                     | 0.00                  | 77.9900        | 0.00  |
| 382904448 | 382904445         | 0.0000                     | 0.00                  | 77.9900        | 0.00  |
+-----------+-------------------+----------------------------+-----------------------+----------------+-------+

提供数据集的预期结果,以及行,如果您可以在文本中发布,将有助于Yayy,它可以工作!!非常感谢,唯一的区别不是静态参数,而是我使用了一个到另一个表的左连接,因为我们将有多个这样的父子记录。非常感谢@Critical Error